php数组用键搜索

时间:2018-04-24 19:21:16

标签: php arrays search

假设一个如下数组:

Array
(
    [a] => Array
        (
            [id] => 3
            [x] => binginb
        )

    [b] => Array
        (
            [id] => 5
            [x] => dibdab
        )

)

现在我想基于其内容访问此数组,因此在这种情况下idx

能够做类似

的事情会很棒
 $i = array_search(5,array_column($a,'id'));
 $stuff = dostuff($a[$i]['x']);

但是这不起作用,因为$a[1]是未定义的偏移量。

是否有可能在不改变原始数组的情况下做这样的事情?

4 个答案:

答案 0 :(得分:4)

array_search()返回array_column()结果的索引。您可以使用array_keys()查找此索引的键:

$a = [
   'a' => ['id' => 3, 'x' => 'binginb'],
   'b' => ['id' => 5, 'x' => 'dibdab'],
   ];
$i = array_search(5, array_column($a,'id'));
$key = array_keys($a)[$i]; // get the key at the $i index.
$stuff = dostuff($a[$key]['x']); // Here, $a[$key]['x'] = 'dibdab'

请注意,如果找不到值,array_search()可能会返回FALSE。您可以在使用之前测试结果(使用严格的比较)。

$i = array_search(5, array_column($a,'id'));
if ($i !== false) {
    $key = array_keys($a)[$i]; // get the key at the $i index.
    $stuff = dostuff($a[$key]['x']); // Here, $a[$key]['x'] = 'dibdab'
}

答案 1 :(得分:2)

使用array_columnid重新索引数组:

$new = array_column($a, 'x', 'id');

然后搜索5,只需:

echo $new[5];

如果您可能不只是x

$new = array_column($a, null, 'id');

然后:

echo $new[5]['x'];

如果你只做一次:

echo array_column($a, 'x', 'id')[5];

或者:

echo array_column($a, null, 'id')[5]['x'];

答案 2 :(得分:1)

如果您不希望受到PHP内置函数的限制,请尝试以下方法:

<?php
function dostuff( $var1 )
{
    print_r($var1);
}

$a = [
   'a' => ['id' => 3, 'x' => 'binginb'],
   'b' => ['id' => 5, 'x' => 'dibdab'],
];

array_map( // 2: pass each element from the result from array_filter to dostuff()
    'dostuff',
    array_filter( // 1: filter $a based on the criteria defined in the anonymous function
        $a,
        function($item){
            return $item['id'] === 5;
        }
    )
);

输出:

Array
(
    [id] => 5
    [x] => dibdab
)

答案 3 :(得分:0)

我认为它会对你有帮助,

<?php
$array = array(
    'a' => array(
        'id' => 3,
        'x' => 'binginb',
    ),
    'b' => array(
        'id' => 5,
        'x' => 'dibdab',
    )
);

$i = array_column($array,'x','id');
  

// $i

的输出      

阵列(       [3] =&gt; binginb       [5] =&gt; dibdab)

$stuff = dostuff($i[5]); // $i[5] return dibdab