PHP映射和拆分多维数组
我正在研究2个多维阵列:PHP映射和拆分多维数组,php,multidimensional-array,mapping,Php,Multidimensional Array,Mapping,我正在研究2个多维阵列: $array1 = array( 0 => array( 'items' => array( 1 => array('79-' => 'abc','80-'=>'123'), 2 => array('79-' => 'Mapping item1','80-'=>'123'), 3 => array('79-' =>
$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-映射这两个数组,并对数组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'),
)
)
);
任何人都知道如何解决这个问题,请帮助。我已经为此工作了几个小时。希望这篇文章能有所帮助。这里我们使用的是
foreach
,array\u column
和array\u map
将[A]更改为[“A”]。。idem B/items[$itemIndex]['79-']到$items/'product6到'product6'我刚刚编辑了键入错误,但这不是解决方案。您能发布预期结果吗?我在理解需要执行的操作时遇到问题。预期的结果是上面的最后一个数组。正如我所检查的,$finalArray不包含$result的值?@Tedxxxx是的,它包含,您可以检查您的预期输出和我的代码段吗?是的,我检查过,最终结果不与$result数组中的值相反,例如“product1”,“product2”等。它不会替换旧数据。哦,您的代码返回正确的结果,但很抱歉,输入数组中有错误。除了'-79',我还有另一个元素'80-',但是对于您的剪接代码,它只返回'-79'。由于我的错误,我将接受你的回答。但是你能帮我解决上面的问题吗。现在,输出结果如下:。但我想在所有已添加的新元素中保留值“80-”。
$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);