2016-07-09 9 views
0

2つの配列(単純型と多次元型の1つ)を持っており、多次元配列の特定のキーに空の値それらを単純な配列からの対応する値で置き換えます。単純な配列および/または2Dアレイの両方のためのPHPキーを比較し、多次元配列から対応するキーの値を単純な配列の対応するキーの値に変更します。

ソリューションはここにある:

PHP Compare and change certain elements in multidimensional arrays

しかし、何が上記の状況では解決策になるのでしょうか?単純な配列の

例:多次元配列の

$superheroes_complete = array(
    1 => 'one', 
    'two' => 'two', 
    3 => 'three', 
    'email' => '[email protected]', 
    5 => 'cinco', 
    6 => 'six', 
    'name' => 'Clark Kent', 
    8 => 'eight' 
); 

例:

$superheroes_empty = array(
    "spiderman" => array(
     "name" => "Peter Parker", 
     "email" => "", 
    ), 
    "superman" => array(
     "name" => "", 
     "email" => "[email protected]", 
    ), 
    "ironman" => array(
    "name" => "Harry Potter", 
    "email" => "[email protected]", 
    ) 
); 

期待:

$superheroes_empty = array(
    "spiderman" => array(
     "name" => "Peter Parker", 
     "email" => "[email protected]", 
    ), 
    "superman" => array(
     "name" => "Clark Kent", 
     "email" => "[email protected]", 
    ), 
    "ironman" => array(
     "name" => "Harry Potter", 
     "email" => "[email protected]", 
    ) 
); 

は、事前にありがとうございます。ここで

+0

を使用することができ、どのようにあなたの単純な配列は、変更する値を知るために、多次元配列に関連することになっていますか?私は2つの間にどんな関係も、どんな説明も見ることができません。 –

+0

関係はそれらのキー名に従って作られるべきです。多次元配列のどのキーが空であるかを比較し、単純な配列のキーの対応する値でその値を置き換えます。上記の例では、 "名前"と "メール"キーの値を置き換えます。 – Alberto

答えて

1

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配列を直接変更するので、空の値を必要とする場合は、これを使用する前にコピーを作成してください。

+0

それは問題ありません。データは必要ありません。これはほんの一例です。しかし、置き換え後に最初の構造に残る '$ superheroes_empty'が重要である。これは可能ですか? – Alberto

+1

これは構造体を変更しません。空の値でのみ完全になります。 –

+0

あなたは正しいです。どうもありがとうございました! :) – Alberto

0

ます。また、この

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); 
関連する問題