У меня есть два массива (один простой и один многомерный), и я хочу проверить, имеют ли определенные ключи из многомерного массива пустые значения и заменяют их соответствующими значениями из простого массива.
Решение для простых массивов и / или 2D-массивов приведено здесь:
PHP Сравнение и изменение некоторых элементов в многомерных массивах
Но каково было бы решение в ситуации выше?
Пример простого массива:
$superheroes_complete = array( 1 => 'one', 'two' => 'two', 3 => 'three', 'email' => 'peterparker@mail.com', 5 => 'cinco', 6 => 'six', 'name' => 'Clark Kent', 8 => 'eight' );
Пример многомерного массива:
$superheroes_empty = array( "spiderman" => array( "name" => "Peter Parker", "email" => "", ), "superman" => array( "name" => "", "email" => "clarkkent@mail.com", ), "ironman" => array( "name" => "Harry Potter", "email" => "harrypotter@mail.com", ) );
Expectation:
$superheroes_empty = array( "spiderman" => array( "name" => "Peter Parker", "email" => "peterparker@mail.com", ), "superman" => array( "name" => "Clark Kent", "email" => "clarkkent@mail.com", ), "ironman" => array( "name" => "Harry Potter", "email" => "harrypotter@mail.com", ) );
Заранее спасибо.
Вот один из способов сделать это, используя array_walk_recursive
:
array_walk_recursive($superheroes_empty, function(&$v, $k) use ($superheroes_complete) { if ($v === '' && isset($superheroes_complete[$k])) { $v = $superheroes_complete[$k]; } });
Это заполнит любые пустые значения, если соответствующий ключ найден в $superheroes_complete
. Поскольку это делает замену по ссылке, она будет напрямую изменять массив $superheroes_empty
, поэтому, если вам все еще нужен тот, у которого есть пустые значения, сделайте копию перед использованием.
Вы также можете использовать это
foreach($superheroes_empty as $key =>$array){ foreach($array as $key1=>$data){ if(empty($data)){ $superheroes_empty[$key][$key1] = $superheroes_complete[$key1]; } } } echo "<pre>";print_r($superheroes_empty);