Обновить массив, но не добавлять новые элементы

0

Итак, у меня есть два массива. Старый и новый. Я хочу обновить новый массив переменными из старого массива, но я не хочу добавлять новые индексы, которые находятся в старом массиве, которые не находятся в новом массиве.

$old_array = array("1" => "one", "2" => "two", "3" => "three", "4" => "four");
$new_array = array("1" => "1", "2" => "2", "3" => "3");

Поэтому я хочу, чтобы новый массив был следующим:

$updated_array = array("1" => "one", "2" => "two", "3" => "three");

Может ли кто-нибудь помочь мне с наиболее эффективным способом сделать это?

Теги:
arrays

4 ответа

0
Лучший ответ

Я действительно хотел дать @void-main правильный ответ, но он допустил некоторые небольшие ошибки, которые мне пришлось исправить, и он не закончил его обновление. Спасибо, что помогли мне начать работу!

$old_array = array("1" => "one", "2" => "two", "3" => "three", "4" => "four");
$new_array = array("1" => "1", "2" => "2", "3" => "3");

foreach($new_array as $key=>$val){
    if(isset($old_array[$key]))
        $new_array[$key] = $old_array[$key];
}

//new_array is now the updated array.

Таким образом, новый массив все равно сохранит все значения, даже если они не очевидны в old_array

2

Можно попробовать использовать foreach(). Пример:

$old_array = array("1" => "one", "2" => "two", "3" => "three", "4" => "four");
$new_array = array("1" => "1", "2" => "2", "3" => "3");
$updated_array = array();
foreach($new_array as $key=>$val){
    if(isset($old_array[$key])){
        $updated_array[$key] = $old_array[$key];
    }
}

print '<pre>';
print_r($updated_array);
print '</pre>';
  • 0
    что если $old_array не имеет ничего от $new_array ? ничто не заканчивается передачей в $updated_array . Также я думаю, что вы имели в виду $key в большинстве операторов foreach вместо $val
  • 0
    тогда чего ты желал?
Показать ещё 1 комментарий
0

Вы можете попробовать

$result = array_intersect_key($old_array, $new_array);
  • 0
    похоже, это не обновляет новый массив, а просто перечисляет ключи, которые находятся в обоих
0

Вы можете использовать метод foreach (предоставляется документация по ключевым значениям): Здесь приведен пример из документов PHP (http://php.net/manual/en/control-structures.foreach.php)

<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню