我已经看到很多问题讨论了我的部分问题,但却未能将它们纳入解决方案。希望有人可以帮助我。
我有两个数组,我称之为Quantity
和Shipping
。
以下是Quantity
:
Array(
[0] => Array(
[0] => 1
[1] => Fed-Ex
)
[1] => Array(
[0] => 2
[1] => USPS
)
[2] => Array(
[0] => 1
[1] => USPS-E
)
)
[0]
是数量,[1]
是名称。
这是Shipping
:
Array(
[0] => Array(
[0] => 3
[1] => Fed-Ex
)
[1] => Array(
[0] => 1
[1] => USPS
)
[2] => Array(
[0] => 11
[1] => USPS-A
)
[3] => Array(
[0] => 10
[1] => USPS-E
)
)
[0]
是索引,[1]
是名称。
我想基于index 1
匹配将它们组合成看起来像这样的东西。如果没有匹配,我希望插入0(就像我的USPS-A
示例中一样)。
我称之为Master
:
Array(
[0] => Array(
[0] => 3
[1] => Fed-Ex
[2] => 1
)
[1] => Array(
[0] => 1
[1] => USPS
[2] => 2
)
[2] => Array(
[0] => 11
[1] => USPS-A
[2] => 0
)
[3] => Array(
[0] => 10
[1] => USPS-E
[2] => 1
)
)
[0]
是索引,[1]
是名称,[2]
是数量。
有没有人有任何建议?我尝试使用嵌套的foreach loops
,但即使我使用break
语句,我最终也会重复。尝试了array_column
和in_array
,但没有成功。
任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
如果您认为shipping
数组总是大于quantity
,那么这就是可行的。
$quantities = [
[1, 'Fex-Ex'],
[2, 'USPS'],
[1, 'USPS-E']
];
$shippings = [
[3, 'Fex-Ex'],
[1, 'USPS'],
[11, 'USPS-A'],
[10, 'USPS-E'],
];
$master = array();
foreach ($shippings as $shipping) {
$qty = 0;
foreach ($quantities as $quantity) {
if ($shipping[1] == $quantity[1]) {
$qty = $quantity[0];
}
}
$master[] = array(
$shipping[0],
$shipping[1],
$qty
);
}
var_dump($master);
答案 1 :(得分:1)
您不需要嵌套循环来执行此操作。你可以只遍历每个数组一次。
首先,使用$shipping
键(名称)作为索引,迭代$master
数组以构建[1]
数组。您可以同时在索引2处为数量添加零值。
foreach ($shipping as $s) {
$master[$s[1]] = $s + [2 => 0];
}
其次,迭代$quantity
数组以更新$master
中的数量值。
foreach ($quantity as $q) {
$master[$q[1]][2] = $q[0];
}
请记住,使用这种方法,使用名称作为键,如果有重复的名称,它们将被覆盖。
答案 2 :(得分:0)
我认为这样做(没有嵌套循环):
<?php
$quantities = [
[1, 'Fed-Ex'],
[2, 'USPS'],
[1, 'USPS-E']
];
$shippings = [
[3, 'Fed-Ex'],
[1, 'USPS'],
[11, 'USPS-A'],
[10, 'USPS-E'],
];
foreach($quantities as &$v) {
$quantities[$v[1]] = $v[0];
unset($v);
}
$master = [];
foreach($shippings as $v) {
$master[] = [
$v[0],
$v[1],
isset($quantities[$v[1]]) ? $quantities[$v[1]] : 0
];
}