我有一个大的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;
}
}
它有效,但我希望有更好的方法可以做到这一点。
你可以
- 写
$link['id']==$id
而不是in_array($id, $link)
会更便宜。 - 在
$result = $link;
后添加break;
指令以避免无用的循环
虽然这个答案在被问到这个问题时不起作用,但现在有一种非常简单的方法可以解决这个困境。
您可以在 PHP 5.5 中执行以下操作:
$newList = array_combine(array_column($list,'id'),$list);
然后,以下内容将是真实的:
$newList[3243] = array(
'id' = '3243';
'link' = 'fruits'; etc...
PHP 5.4 及更高版本中最简单的方法是在其回调函数中结合array_filter
和use
语言结构:
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
获取不同子数组的在线3v4l示例。