我有一个数组。我需要一个函数,该函数通过其值(例如值'Yes')找到一个数组,并返回值为'Yes'的数组。请帮我,我已经为此工作了3天。
$arrays = [
'arr1' => [
'y' => 'Yes', // Return me 'arr1' by value 'Yes'
'n' => 'No',
],
'arr2' => [
'g' => 'Good',
'b' => 'Bad',
],
'arr3' => [
'm' => 'Mom',
'd' => 'Dad'
]
];
答案 0 :(得分:1)
使用每行的简单比较值:
$res_ar = []; // resultant array
foreach($ar as $ind => $row){
if (!empty($row['y']) && $row['y'] == 'Yes') $res_ar[$ind] = $row;
}
这里empty($row['y'])
检查子索引,该子索引是否存在于行中。
$row['y'] == 'Yes'
说宾果!然后抓住这一行。
答案 1 :(得分:1)
由于有一个laravel标签,我想我可能应该包括一个laravel解决方案。
$search = 'Yes';
$result = collect($arrays)->reject(function ($item) use ($search) {
return ! collect($item)->contains($search);
});
collect($arrays)
将array
转换为幼虫collection
。 reject
函数将删除从回调函数返回的所有内容。在这种情况下,如果找到搜索词,collect($name)->contains($search)
将返回true
。 !
将其更改为false
,实际上是要求拒绝函数not
拒绝当前数组。因此,最后,剩下的将是给定搜索词返回true的数组。
希望我有道理,希望对您有所帮助。
答案 2 :(得分:-1)
function getArrayByKey(string $needle, array $haystack): array
{
return array_filter($haystack, function ($val) use ($needle) {
return in_array($needle, $val);
});
}
// Example (expects that your $arrays variable is already initialized)
getArrayByKey('Yes', $arrays);
在这里过滤数组并删除每个给定键都没有匹配值的子数组。它返回剩余的子数组。