2017-09-19 2 views
1

Je travaille sur 2 tableaux multidimensionnels:mapping PHP et diviser des tableaux multidimensionnels

$array1 = array(
    0 => array(
     'items' => array(
      1 => array('79-' => 'abc','80-'=>'123'), 
      2 => array('79-' => 'Mapping item1','80-'=>'123'), 
      3 => array('79-' => 'abc','80-'=>'123') 
     ) 
    ), 
    1 => array(
     'items' => array(
      1 => array('79-' => 'Mapping item2','80-'=>'123'), 
     ) 
    ) 
); 

C'est le deuxième tableau:

$array2 = array(
    2 => array(
     "A" => 'Mapping item1', 
     "B" => array(1 => 'product1', 2 => 'product2', 3 => 'product3') 
    ), 
    3 => array(
     "A" => 'Mapping item2', 
     "B" => array(1 => 'product4', 2 => 'product5', 3 => 'product6') 
    ) 
); 

Je suis en train de cartographier les 2 tableaux par la valeur de clé 79-, et apporter des modifications au tableau1. Voici mon code. Je veux retourner un tableau comme ci-dessous mais mon code ne fonctionne pas.

$expectedArray = array(
    [0]=> array(
     ['items'] => array(
      [1]=>array('79-'=>'abc','80-'=>'123'), 
      [2]=>array('79-'=>'product1','80-'=>'123'), 
      [3]=>array('79-'=>'product2','80-'=>'123'), 
      [4]=>array('79-'=>'product3','80-'=>'123'), 
      [5]=>array('79-'=>'abc','80-'=>'123') 
     ) 
    ), 
    [1]=>array(
     ['items'] => array(
      [1]=>array('79-'=>'product4','80-'=>'123'), 
      [2]=>array('79-'=>'product5','80-'=>'123'), 
      [3]=>array('79-'=>'product6','80-'=>'123'),   
     ) 
    ) 
); 

Quelqu'un sait comment résoudre ce problème, s'il vous plaît, aidez-nous. J'ai travaillé dessus pendant des heures.

+0

changement [A] à [ "A"] .. idem B/articles [$ itemIndex] [ '79-'] à $ articles/'product6 to' product6 ' – Cuchu

+0

Je viens d'éditer les fautes de frappe, mais ce n'est pas la solution. – Tedxxxx

+0

Pouvez-vous poster un résultat escompté? J'ai de la difficulté à comprendre ce qui doit être fait. – Andreas

Répondre

1

Espérons que celui-ci vous sera utile. Ici, nous utilisons foreach, array_column et array_map

Try this code snippet here

$column=array_column($array2,"B","A"); 
foreach ($array1 as $key => $itemsArray) 
{ 
    $finalArray=array();//maintaining a final array 
    foreach($itemsArray["items"] as $itemKey => $item) 
    { 
     if(isset($column[$item["79-"]]))//checking key in the column array 
     { 
      $result=array_map(function($value) use($item){ 
       unset($item["79-"]); 
       return array("79-"=>$value)+$item; 
      },$column[$item["79-"]]); 
      $finalArray=$finalArray+$result;//appending array with + operator 
     } 
     else 
     { 
      $finalArray[]=$item; 
     } 
    } 
    $array1[$key]["items"]=$finalArray;//overwriting final array to existing one 
} 
print_r($array1); 
+0

En vérifiant, le $ finalArray ne contient pas la valeur de $ result? – Tedxxxx

+0

@Tedxxxx Oui, il contient, Pouvez-vous vérifier votre sortie attendue et mon extrait? –

+0

Oui j'ai vérifié, le résultat final ne contredit pas la valeur dans le tableau de résultats $ tels que 'product1', 'product2', etc. Il ne remplace pas les anciennes données. – Tedxxxx