Я хочу получить массив по его значению
У меня есть массив. Мне нужна функция, которая находит массив по его значению, например значение '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'
]
];

Ответы - Я хочу получить массив по его значению / I want to get an array by its' value

20.11.2019 06:12:19
Используйте простое сравнение значений каждой строки:
$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'
говорит Бинго! а потом ловит этот ряд.


20.11.2019 06:14:03
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);
Здесь вы фильтруете массив и удаляете каждый суб-массив, который не имеет соответствующего значения для данного ключа. Он возвращает оставшиеся вложенные массивы.






20.11.2019 07:12:39
Поскольку есть тег laravel, я подумал, что, возможно, включу решение laravel.
$search = 'Yes';
$result = collect($arrays)->reject(function ($item) use ($search) {
return ! collect($item)->contains($search);
});
collect($arrays)
преобразует array
в коллекцию laravel collection
функция reject удаляет все, что возвращается из функции обратного вызова. В этом случае reject
вернет collect($name)->contains($search)
, если будет найден поисковый запрос. То true
меняет ее на !
, по сути, просит отклонить функцию, чтобы false
отвергать текущего массива. Таким образом, в конце концов, то, что останется, - это массивы, которые вернули true для данного поискового запроса.
Надеюсь, я имел смысл и надеюсь, что это поможет кому-то.