我有一个很大的PHP数组,类似于:
$list = array(
array(
'id' = '3243'
'link' = 'fruits'
'lev' = '1'
),
array(
'id' = '6546'
'link' = 'apple'
'lev' = '2'
),
array(
'id' = '9348'
'link' = 'orange'
'lev' = '2'
)
)
我想获得包含特定id
。
目前我使用以下代码:
$id = '3243'
foreach ($list as $link) {
if (in_array($id, $link)) {
$result = $link;
}
}
它有效,但我希望有更好的方法。
答案 0 :(得分:4)
你可以
$link['id']==$id
而不是in_array($id, $link)
,这样会更便宜。break;
之后添加$result = $link;
指令以避免无用循环答案 1 :(得分:2)
虽然在提出问题时这个答案是行不通的,但现在解决这个难题的方法很简单。
您可以在PHP 5.5中执行以下操作:
$newList = array_combine(array_column($list,'id'),$list);
以下将是真的:
$newList[3243] = array(
'id' = '3243';
'link' = 'fruits'; etc...
答案 2 :(得分:1)
PHP 5.4和更高版本中最简单的方法是在其回调函数中组合array_filter
和use
language construct:
function subarray_element($arr, $id_key, $id_val = NULL) {
return current(array_filter(
$arr,
function ($subarr) use($id_key, $id_val) {
if(array_key_exists($id_key, $subarr))
return $subarr[$id_key] == $id_val;
}
));
}
var_export(subarray_element($list, 'id', '3243')); // returns:
// array (
// 'id' => '9348',
// 'link' => 'orange',
// 'lev' => '2',
// )
current
仅返回过滤后的数组的第一个元素。
来自OP的$list
的另外online 3v4l examples of getting different sub-arrays。