2016-11-06 2 views
0

Работа с PHP. У меня есть массив 1 с этим ключами и значениями:PHP array_merge не работает

$array_1 = array(
(more values) 
'propub_cost_max' => 5, 
'propub_cost_min' => 0.5, 
'average_calc_last' => '-1 Months', 
'propub_qtd_first_offer' => 4 
); 

и массив 2:

$array_2 = array(
'propub_cost_max' => 20, 
'propub_cost_min' => (no value), 
'average_calc_last' => (no value), 
'propub_qtd_first_offer' => (no value) 
); 

Я хочу, чтобы объединить массив 2 с массивом 1, так что я сделал:

$result = array_merge($array_2, $array_1); 

Но в результате чего:

$result = array(
(more values) 
'propub_cost_max' => 5, 
'propub_cost_min' => 0.5, 
'average_calc_last' => '-1 Months', 
'propub_qtd_first_offer' => 4 
); 

Ключ propub_cost_max должен принимать значение 20, правильно?

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

Спасибо всем.

+2

У вас есть '}' вместо скобки. – TheValyreanGroup

+3

«Если входные массивы имеют одинаковые строковые ключи, то более позднее значение для этого ключа перезапишет предыдущий». http://php.net/manual/en/function.array-merge.php. в вашем случае array_1 является последним – nogad

+0

Спасибо @TheValyreanGroup –

ответ

1

«Если входные массивы имеют одинаковые строковые ключи, то более позднее значение для этого ключа перезапишет предыдущий». в вашем случае array_1 - последний.

Says nogad.

(ссылка на array_merge)

А также

У вас есть} вместо круглых скобках.

Как говорится TheValyreanGroup.

Оба они абсолютно правильные. Таким образом,

$result = array_merge($array_1, $array_2); 

Решите вашу проблему. Значения меняются местами, так что $array_2 теперь перезаписывает значения в $array_1.

Чтобы решить общую проблему хочет обновить некоторые значения, не зная, какие значения и какие условия вы хотите сохранить, мы сводится к просто не перезаписать значения с пустыми, так:

$array_2 = array_filter($array_2); //clears empty values 
$result = array_merge($array_1, $array_2); // as before. updates non-empty new values. 
+0

'' ', очевидно, ошибка копирования, иначе скрипт даже не запустится, и он вообще не получит никакого результата. – Barmar

+0

Ну, это решит проблему в этом тестовом примере, но желаемое поведение в общем случае предположительно состоит в том, что max получает большее из двух значений, а не второе из двух (хотя их замена здесь помогает). –

+0

@Barmar хорошо да, но я думаю, что все равно стоит отметить, что комментарий, поскольку опечатки часто критичны в возникновении ошибок, а пользователь с привычкой опечаток (и не обнаруживая и исправляя их) будет иметь много проблем с кодом, которые они не могут решать сами. – Martin

Смежные вопросы