获取具有特定键/值对的二维数组中的子数组
Posted
技术标签:
【中文标题】获取具有特定键/值对的二维数组中的子数组【英文标题】:Get the sub array in a bidimensional array having a particular key/value pair 【发布时间】:2012-12-05 16:30:23 【问题描述】:我有一个很大的 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;
它有效,但我希望有更好的方法来做到这一点。
【问题讨论】:
不是真的,不是 - 虽然看起来in_array
最好用 $link['id'] == $id
代替
***.com/questions/1019076/…
@ke20 答案大多是针对多维数组的,这里的解决方案更简单一些(因为 OP 的数组只是二维的)。
【参考方案1】:
你可以
写$link['id']==$id
而不是in_array($id, $link)
这样会更便宜。
在$result = $link;
之后添加break;
指令以避免无用的循环
【讨论】:
此页面可以用于关闭未来的重复,但遗憾的是,接受的答案不是很干净/可读。也许用一个完整的代码块来改进这个答案并保留解释。【参考方案2】:虽然在问这个问题时这个答案不会奏效,但现在有一种很简单的方法可以解决这个难题。
您可以在 PHP 5.5 中执行以下操作:
$newList = array_combine(array_column($list,'id'),$list);
然后以下将是正确的:
$newList[3243] = array(
'id' = '3243';
'link' = 'fruits'; etc...
【讨论】:
不,不,不,等等。不要这样做。相反,请转到 php 手册中的array_column()
并阅读其第三个参数。 array_combine()
不应被调用。【参考方案3】:
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。
【讨论】:
以上是关于获取具有特定键/值对的二维数组中的子数组的主要内容,如果未能解决你的问题,请参考以下文章
PHP:数组——二维转一维,二维转三维,将特定的数据作为键名