首页 > 解决方案 > 1 个数组中带有 diff 键的数组

问题描述

就像问题说的那样,我有 2 个 foreach 循环,1 个循环迭代一个有 4 个键的数组,另一个循环有 3 个键的数组,如何仅在 1 中获得这两个数组?

我有这个

                ....
               ],
            ],
            'Detalle' => array()
    ];

  foreach ($datos["line_items"] as $line => $item) {  
    $tempArray = array(     
      'NmbItem' => $item['name'],
      'QtyItem' => $item['quantity'],   
      'PrcItem' => $item['price'],
      'IndExe' => 1
    );   
  }

  foreach($datos["fee_lines"] as $line => $fee){
    $tempArray=array(     
      'NmbItem' => $fee['name'],
      'QtyItem' => 1,
      'PrcItem' => $fee['total']
    );
  }  

  $dte['Detalle'][] = $tempArray; 
}

如果您注意到第二个数组循环不包含 'indexe' 键,则在 $dte['Detalle'][] = $tempArray 中分配此 tempArray 后仅适用于最后一个循环,或者如果我删除第二个循环,则第一个循环有效。

输出应该是这样的:

tempArray (array[0] 'NmbItem => name','QtyItem'=> 10,'PrcItem'= 1000,'IndExe' => 1 array[1] 'NmbItem => 另一个名字','QtyItem'=> 5 ,'PrcItem'=> 3000 )

谢谢你!

标签: phparrays

解决方案


要使其与您的代码一起使用,您还应该$dte['Detalle'][] = $tempArray; 在第一个循环之后添加。

问题是您$tempArray在每个 foreach 中设置 ,因此在$dte['Detalle'].

所以,这样的事情应该有效:

foreach ($datos["line_items"] as $line => $item) {  
    $tempArray = array(     
      'NmbItem' => $item['name'],
      'QtyItem' => $item['quantity'],   
      'PrcItem' => $item['price'],
      'IndExe' => 1
    );   
 }

 $dte['Detalle'][] = $tempArray; 

 foreach($datos["fee_lines"] as $line => $fee){
    $tempArray=array(     
      'NmbItem' => $fee['name'],
      'QtyItem' => 1,
      'PrcItem' => $fee['total']
    );
 }  

 $dte['Detalle'][] = $tempArray; 

但是,我会使用该array_map功能来做到这一点。

文档array_map

你可以有这样的东西:

<?php

$data_1 = array_map(function($item){
    return array(     
      'NmbItem' => $item['name'],
      'QtyItem' => $item['quantity'],   
      'PrcItem' => $item['price'],
      'IndExe' => 1
    );
}, $datos["line_items"]);

$data_2 = array_map(function($fee){
    return array(     
      'NmbItem' => $fee['name'],
      'QtyItem' => 1,
      'PrcItem' => $fee['total']
    )
}, $datos["fee_lines"]);

$dte['Detalle'] = array_merge($dte['Detalle'], $data_1, $data_2);

推荐阅读