Задать вопрос
@Nikelamoc

Как менее ресурсоемко обработать 2 масива?

День добрый.
Есть 2 массива
$array_first и $array_second

Мне надо вытащить все значения которые есть в обоих массивах + их ключи .
Сейчас это решается так
foreach($array_first as $key => $value)
	{
	if (in_array($value, $array_second, true))
		{
		$key_second = array_search($value, $array_second);

		// тут засовываем все в отдельный массив

		}

Как-то это все сравнение можно сделать более разумно ?
Пытался через array merge, не вышло ничего (
Кода мне не надо, просто тыкните в направление куда думать .
  • Вопрос задан
  • 162 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
miraage
@miraage
Старый прогер
array_intersect_assoc

// EDIT

<?php

$foo = [
    'alice' => 'bob',
    'bar' => 'baz',
];

$bar = [
    'john' => 'doe',
    'foo' => 'baz',
];

var_dump(
    array_intersect($foo, $bar),
    array_intersect($bar, $foo)
);

// output:
array(1) {
  'bar' =>
  string(3) "baz"
}
array(1) {
  'foo' =>
  string(3) "baz"
}
Ответ написан
@SilverSlice
  • Если в массивах нет повторяющихся значений и значения имеют лишь тип int или string, то можно сделать array_flip второго массива и в цикле по первому проверять наличие ключей во втором через isset.
  • Если в массивах нет повторяющихся значений, а предыдущий вариант не подошел, можно взять вашу реализацию, убрав из неё in_array.
  • Если в массивах возможны повторяющиеся значения, в предыдущем варианте заменить array_search на array_keys.

Если передумаете и захотите кода и тестов - добро пожаловать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега PHP
♬♬
Отсортировать каждый массив по значениям; двигаться по обоим массивам, отлавливая совпадающие значения и их ключи.

И сортировка может быть выполнена с минимальными затратами по памяти, порциями. И вторая фаза, сравнение – достаточно дежать в памяти текущие значения каждого из массивов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы