2015-12-18 2 views
6

Моя цель - объединить 2 разных массива.PHP array_merge пустые значения всегда меньше prioritar

У меня есть таблица «a» & «b». Данные из таблицы «a» являются более достоверными.

ПРОБЛЕМА: если ключ из «a» содержит пустое значение, я хотел бы взять его из таблицы «b».

Вот мой код:

<?php 

$a = array('key1'=> "key1 from prioritar", 'my_problem'=> ""); 

$b = array('key1'=> "key1 from LESS prioritar", 'key2'=>"key2 from LESS prioritar", 'my_problem'=> "I REACHED MY GOAL!"); 

$merge = array_merge($b, $a); 

var_dump($merge); 

Есть ли способ сделать это в одной функции, не делая что-то, как показано ниже?

foreach($b as $key => $value) 
{ 
    if(!array_key_exists($key, $a) || empty($a[$key])) { 
    $a[$key] = $value; 
    } 
} 
+1

Ваш массив '$ b' имеет 2' key2'-индекса? – roullie

+1

'! Array_key_exists || пустой' - это вздор. Использование одного из них будет очень хорошим, в зависимости от того, интересуетесь ли вы сравнением с 'false' или нет. Использование обоих вместе такое же, как использование 'empty'. – deceze

+0

@roullie, спасибо, это была опечатка – Bast

ответ

5

Вы можете использовать array_replace и array_filter

$mergedArray = array_replace($b, array_filter($a)); 

Результат будет выглядеть так:

array(3) { 
    ["key1"]=> 
    string(19) "key1 from prioritar" 
    ["key2"]=> 
    string(24) "key2 from LESS prioritar" 
    ["my_problem"]=> 
    string(18) "I REACHED MY GOAL!" 
} 
+2

Обратите внимание, что 'array_filter ($ a) + $ b' тоже будет хорошо. – deceze

+1

@Matei, спасибо большое. Это (почти) то, что я искал. «почти», потому что изначально я хотел сохранить пустое значение от «$ a», если ключ не существует в «$ b». Но это уже намного лучше, чем foreach;) – Bast

2

Просто array_filter()$a, который удалит любой элемент с '' значением.

$merge = array_merge($b, array_filter($a)); 
+0

спасибо, тоже правильно :) – Bast

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