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但是不,这是一个巨大的代码库,有很多规则和约定,现在要解释的故事很长,但我知道这个问题在整个循环故事中有点模糊。