Я хочу получить массив по его значению

Я хочу получить массив по его значению

20.11.2019 06:05:13 Просмотров 53 Источник

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

https://stackoverflow.com/questions/58957459/i-want-to-get-an-array-by-its-value#comment104170426_58957459
Что вы пробовали до сих пор?

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

Aksen P

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'говорит Бинго! а потом ловит этот ряд.

https://stackoverflow.com/questions/58957459/i-want-to-get-an-array-by-its-value/58957611#comment104172340_58957611
Спасибо тебе! за поддержку
Является ответом!
jrenk

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);

Здесь вы фильтруете массив и удаляете каждый суб-массив, который не имеет соответствующего значения для данного ключа. Он возвращает оставшиеся вложенные массивы.

https://stackoverflow.com/questions/58957459/i-want-to-get-an-array-by-its-value/58957648#comment104170854_58957648
В случае нескольких строк с поисковым значением он не будет работать , также, он не ловит индекс строки внутри основного массива. и возвращает массив в котором он находится или массивы
https://stackoverflow.com/questions/58957459/i-want-to-get-an-array-by-its-value/58957648#comment104171103_58957648
@AksenP я изменил возврат по умолчанию, если совпадение не найдено. Но я не уверен насчет первой части. Мое понимание вопроса заключается в том, что в массиве не может быть больше измерений.
https://stackoverflow.com/questions/58957459/i-want-to-get-an-array-by-its-value/58957648#comment104171201_58957648
Прочитайте еще раз правильно -> или массивы. Хорошо, вы нашли совпадение, в каком массиве оно находится?
https://stackoverflow.com/questions/58957459/i-want-to-get-an-array-by-its-value/58957648#comment104171294_58957648
Прямо сейчас у меня есть ты.
https://stackoverflow.com/questions/58957459/i-want-to-get-an-array-by-its-value/58957648#comment104172100_58957648
@jrenk спасибо этой работы!!!!
user3532758

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 для данного поискового запроса.

Надеюсь, я имел смысл и надеюсь, что это поможет кому-то.

Закрыть X