假设一个如下数组:
Array
(
[a] => Array
(
[id] => 3
[x] => binginb
)
[b] => Array
(
[id] => 5
[x] => dibdab
)
)
现在我想基于其内容访问此数组,因此在这种情况下id
和x
。
能够做类似
的事情会很棒 $i = array_search(5,array_column($a,'id'));
$stuff = dostuff($a[$i]['x']);
但是这不起作用,因为$a[1]
是未定义的偏移量。
是否有可能在不改变原始数组的情况下做这样的事情?
答案 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_column
按id
重新索引数组:
$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