Объединить 2 массива: не изменять индексы и добавлять 2-е значения по порядку в промежутки

У меня есть два массива. Я хочу, чтобы я не менял индексы первого, а второй добавлялся по порядку в пропуски отсутствующих индексов:

$a = array(
0 => 9,
2 => 13
);

$b = array(
1 => 10,
2 => 11,
3 => 12,
4 => 1
);

Я хочу этот результат:

$ab = array(
0 => 9,
1 => 10,
2 => 13,
3 => 11,
4 => 12,
5 => 1
);

Я попробовал это:

$ab = $a+$b;    // Keeps indexes, but removes key 2 from array $ b
$ab = array_merge($a, $b);  // Change indexes
$ab = array_unique(array_merge($a,$b));     // Change indexes
$ab = array_merge($a, array_diff($b, $a));  // Change indexes

0

Решение

Переберите $bкопирование элементов в $a, Но если индекс уже существует, увеличьте корректировку, чтобы получить новый индекс.

function mergeArrays($a, $b) {
$adjust = 0;
foreach ($b as $i => $val) {
while (isset($a[$i + $adjust])) {
$adjust++;
}
$a[$i + $adjust] = $val;
}
ksort($a); // Put in order by new indexes
return $a;
}

DEMO

1

Другие решения

Не похоже на прямое слияние. Вероятно, вы можете попробовать запустить цикл через ваш второй массив и медленно добавлять элементы в первый массив в местах, где они подходят

function mergeArrays($a, $b)
{
foreach ($b as $i => $v) {
while (array_key_exists($i, $a)) {
$i++;
}
$a[$i] = $v;
}

ksort($a);

return $a;
}
1

foreach ($a as $k => $v ) {
$new_array[$k] = $v ;
}

foreach ($b as $k => $v ) {
$new_array[$k] = $v ;
}

echo print_r(new_array);

Надеюсь, что этот скрипт из смартфона будет работать

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector