php二维数组如何快速查找对应字段值?

Array
(
    [0] => Array
        (
            [id] => 1
            [field_name] => 姓名
            [field_type] => 1
            [field_tips] => 请输入姓名
            [hidden] => 1
            [multi_line] => 1
            [require] => 
            [sort] => 
        )

    [1] => Array
        (
            [id] => 2
            [field_name] => 性别
            [field_type] => 2
            [field_tips] => 请选择性别
            [hidden] => 1
            [multi_line] => 0
            [require] => 
            [sort] => 
        )

    [2] => Array
        (
            [id] => 3
            [field_name] => 电话
            [field_type] => 1
            [field_tips] => 请输入电话
            [hidden] => 1
            [multi_line] => 0
            [require] => 
            [sort] => 
        )
)

怎样根据id值取出,此id对应的 multi_line,字段的值。

例如:id=3,取出的multi_line = 0

我记得php好像有这种内置的数组函数,找半天没找到。

阅读 4.5k
3 个回答

不知道你是不是想的这个:

$map = array_column($list, 'multi_line', 'id');
echo $map[1]; // 0
function where($array, $key, $value)
{
 $results = [];
 if (is_array($array)) {
 if (isset($array[$key]) && $array[$key] == $value) {
 $results[] = $array;
 }
 foreach ($array as $subarray) {
 $results = array_merge($results, where($subarray, $key, $value));
 }
 }
 return $results;
}

$array = [
 ['id' => 1, 'multi_line' => 1],
 ['id' => 2, 'multi_line' => 0],
 ['id' => 3, 'multi_line' => 0],
];
$aims = where($array, 'id', 3);

print_r($aims);

结果:

Array ( [0] => Array ( [id] => 3 [multi_line] => 0 ) )

无解。不存在快速。按照你这样的结构。无论怎么写,复杂度也要 O(n)
你可以考虑将id作为key,这样查询的速度就是 O(1)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题