Php 根据项中键的值获取数组中的项
假设我有这样一个数组:Php 根据项中键的值获取数组中的项,php,Php,假设我有这样一个数组: $myArray = [ [ 'id' => 1, 'name' => 'Some Name' ], [ 'id' => 2, 'name' => 'Some Other Name ] ] 现在,如果希望在不使用索引($myArray[1])的情况下获取第二项,而是使用name的值,即某个其他名称,我该怎么做 我不想只为一个值在整个数组中循环,那么我如何才能以自己不显式循环数组的方式编写它呢?我查看了array\u search
$myArray = [
[ 'id' => 1, 'name' => 'Some Name' ],
[ 'id' => 2, 'name' => 'Some Other Name ]
]
现在,如果希望在不使用索引($myArray[1]
)的情况下获取第二项,而是使用name
的值,即某个其他名称
,我该怎么做
我不想只为一个值在整个数组中循环,那么我如何才能以自己不显式循环数组的方式编写它呢?我查看了array\u search()
,但找不到$myArray
包含其他数组作为项目的示例。您可以使用array\u filter()函数:
<?php
$myArray = [
['id' => 1, 'name' => 'Some Name'],
[
'id' => 2, 'name' => 'Some Other Name'
]
];
$filterData = array_filter($myArray, function ($data) {
return $data['name'] == "Some Other Name";
});
var_dump($filterData);
die;
?>
不完全确定您想做什么,但您可以在
名称
上为数组编制索引:
echo array_column($myArray, null, 'name')['Some Other Name']['id']; //echos 2
$result = array_column($myArray, null, 'name');
echo $result['Some Other Name']['id']; // echos 2
echo $result['Some Name']['id']; // echos 1
要执行一次并访问所有名称
:
echo array_column($myArray, null, 'name')['Some Other Name']['id']; //echos 2
$result = array_column($myArray, null, 'name');
echo $result['Some Other Name']['id']; // echos 2
echo $result['Some Name']['id']; // echos 1
这是最简单的解决方案:
$requiredItem = null;
foreach ($myArray as $item) {
if ($item['name'] === 'Some Other Name') {
$requiredItem = $item;
// `break` allows you to STOP iterating over array
break;
}
}
print_r($requiredItem);
所有其他解决方案将在阵列上至少包含一次完整循环。仅使用
array\u search
无法做到这一点,它只会比较完整的项目。您可以使用f.e.array\u filter
过滤掉所有不匹配的元素。或者首先使用array\u column
仅获取名称值,然后再次使用array\u search
在其中搜索您的名称,然后使用find键访问原始数组中的项目…array\u search
也使用循环,震惊@mulder的要点是,我不能编写循环,因为它不会经过代码审查。但是谢谢你提到它,真的很有帮助。做代码审查的人不是很聪明吗?@u_mulder这是另一个有点重的因素tbh:P但是不,这是一个巨大的代码库,有很多规则和约定,现在要解释的故事很长,但我知道这个问题在整个循环故事中有点模糊。