Быстрый способ получить значение из массива с помощью другого массива, дающего условие - PullRequest
0 голосов
/ 19 сентября 2019

Допустим, есть array $filter_from_array_id = array(2,8,52,45,7)

А затем есть еще один массив

$main_array = array([0] => array(id=> 8,name => 'data-ryhryh'),[1] => array(id=> 7,name => 'data-ththt'),[2] => array(id=> 66,name => 'data-kukuk'),[3] => array(id=> 85,name => 'data-gegegeg')

Я хочу получить результат, подобный этому array([0] => array(id=> 8,name => 'data-ryhryh'),

Вы видитеточка, id фильтруется.

Я получу результат с помощью циклов, но если основной массив больше, чем он может занять время, мне интересно, есть ли короткий путь, чем цикл через все.

Я также хотел бы знать, есть ли в php что-то встроенное для этого или что-то близкое.

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Для этого есть функция: array_filter и in_array для проверки значения в массиве.

array_filter(array $array [, callable $callback [, int $flag = 0 ]]) : array

Итерациипо каждому значению в массиве, передавая их в функцию обратного вызова.Если функция обратного вызова возвращает TRUE, текущее значение из массива возвращается в массив результатов.Ключи массива сохраняются.

Вам не нужен цикл для выполнения такой операции. Функции массива PHP .

Редактировать : код переписан из-за видимости переменной.

Исправлено и проверено PHP7 для массива скобок ()== [] здесь: phptester

// Declaring $filters ... is not visible in function
// and can't be pass as arguments to the callback.
function filters () {
 return [2,3,52,45,7];
};

// The array to filter
$main_array = [['id' => 8,'name' => 'data-ryhryh'], ['id'=> 7,'name' => 'data-ththt']];

// Filter data having an id in the array of filters.
// Adding & to improve memory usage
$result = array_filter($main_array, function (array &$item) {
  return in_array($item['id'], filters());
});

print_r($result);
// result = Array([1] => Array([id] => 7 [name] => data-ththt))

Примечание: keys из $main_array будет сохранено

1 голос
/ 19 сентября 2019

Создайте ассоциативный массив из $main_array, чтобы вам не пришлось зацикливаться, чтобы найти идентификаторы.

$main_assoc = array_combine(array_column($main_array, 'id'), $main_array);
$result = [];
foreach ($filter_from_array_id as $id) {
    if (isset($main_assoc[$id])) {
        $result[] = $main_assoc[$id];
    }
}
...