2017-09-19 15 views
1

PHPマッピングおよび分割多次元配列

$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'), 
     ) 
    ) 
); 

これは二番目の配列である:Iにより2つの配列をマッピングしようとしてい

$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') 
    ) 
); 

キー値79-を変更し、配列1を変更します。ここに私のコードです。

foreach ($array1 as $key => $orders) { 
    $items = $orders['items']; 
    $itemIndex = 1; 
    foreach ($items as $k => $item) { 
     foreach ($array2 as $row) { 
      if (strpos($item['79-'], $row['A']) !== false) { 
       foreach ($row['B'] as $ite) { 
        items[ $itemIndex ]['79-'] = $ite; 
        $itemIndex++; 
       } 
      } 
     } 
     $itemIndex++; 
    } 

    $orders['items'] = $items; 
    $array1[ $key ] = $orders; 
} 

以下のように配列を返したいが、コードが機能しない。

$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'),   
     ) 
    ) 
); 

誰でもこの問題を解決する方法を知っているので、助けてください。私はこれを何時間も働いてきました。

+0

変更[A] [ "A"] ..同上のB /アイテム[$ itemIndex] [ '79-'] $へのアイテム/ 'product6 to' product6 ' – Cuchu

+0

私は入力ミスを編集したばかりですが、解決策ではありません。 – Tedxxxx

+0

期待どおりの結果を投稿できますか?私は何をする必要があるのか​​理解するのに問題があります。 – Andreas

答えて

1

これは役に立ちます。ここではforeacharray_columnarray_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

私がチェックしたように、$ finalArrayは$ resultの値を含んでいませんか? – Tedxxxx

+0

@Tedxxxxはい、含まれています、あなたは期待された出力と私のスニペットを確認できますか? –

+0

はい私は、最終結果が 'product1'、 'product2'などの$ result配列の値に影響を与えないことを確認しました。これは古いデータを置き換えません。 – Tedxxxx