Php 获取具有特定键/值对的二维数组中的子数组
我有一个大型PHP数组,类似于:Php 获取具有特定键/值对的二维数组中的子数组,php,arrays,foreach,keyvaluepair,sub-array,Php,Arrays,Foreach,Keyvaluepair,Sub Array,我有一个大型PHP数组,类似于: $list = array( array( 'id' = '3243' 'link' = 'fruits' 'lev' = '1' ), array( 'id' = '6546' 'link' = 'apple' 'lev' = '2' ), array( 'id' =
$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;
}
}
这是可行的,但我希望有更好的方法来做到这一点。你可以
- 在数组($id,$link)中写入
而不是$link['id']==$id
,这样成本会更低
- 添加一个
break
$result=$link之后的code>指令代码>以避免无用的循环
$newList = array_combine(array_column($list,'id'),$list);
那么,以下情况将是正确的:
$newList[3243] = array(
'id' = '3243';
'link' = 'fruits'; etc...
PHP 5.4及以上版本中最简单的方法是在其回调函数中结合和:
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',
// )
只返回过滤数组的第一个元素。
OP的
$list
中还有一些,不是真的,不-虽然看起来像是在_数组中
最好用$link['id']=$id
@ke20代替。答案主要是多维数组,这里的解决方案比较简单(因为OP的数组只是二维的)。不,不,等等。不要这样做。相反,请转到php手册中的array\u column()
,并阅读其第3个参数<不应调用code>array\u combine()。此页面可用于关闭将来的副本,但遗憾的是,接受的答案不是很清晰/可读。也许可以用一个完整的代码块来改进这个答案,并保留解释。