2017-09-19 5 views
1

:PHP 매핑 및 분할 다중 차원 배열 I 2 다차원 배열 작업입니다

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

이 두 번째 배열 :

$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-를 변경하고 array1을 변경하십시오. 여기 내 코드가있다.

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"] .. IDEM에 B/항목 [$ itemIndex라는] '79-'] $ 행에는 항목/'product6 to'product6 ' – Cuchu

+0

방금 ​​타이핑 실수를 편집했지만 해결 방법이 아닙니다. – Tedxxxx

+0

예상되는 결과를 게시 할 수 있습니까? 내가해야 할 일을 이해하는 데 문제가 있습니다. – Andreas

답변

1

희망이 있으면 도움이 될 것입니다. 다음은 foreach, array_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'등과 같이 $ 결과 배열에 값을 부여하지 않습니다. 이전 데이터를 대체하지는 않습니다. – Tedxxxx