我想按其值获取一个数组

时间:2019-11-20 15:05:13

标签: php arrays laravel

我有一个数组。我需要一个函数,该函数通过其值(例如值'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'
     ]
 ];

3 个答案:

答案 0 :(得分:1)

使用每行的简单比较值:

$res_ar = [];                     // resultant array 
foreach($ar as $ind => $row){
    if (!empty($row['y']) && $row['y'] == 'Yes') $res_ar[$ind] = $row; 
}

Demo

这里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转换为幼虫collectionreject函数将删除从回调函数返回的所有内容。在这种情况下,如果找到搜索词,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);

在这里过滤数组并删除每个给定键都没有匹配值的子数组。它返回剩余的子数组。