PHP Сравнение ключей и изменение определенных значений из многомерного массива с соответствующими значениями ключей из простого массива

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

Решение для простых массивов и / или 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", ) ); 

Заранее спасибо.

Solutions Collecting From Web of "PHP Сравнение ключей и изменение определенных значений из многомерного массива с соответствующими значениями ключей из простого массива"

Вот один из способов сделать это, используя 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);