我有一个包含3个产品的数组,其属性为" color"和"尺寸"并且产品由数字标识(['代码'])。 我的问题是,当我从数据库中提取数据时,我得到的这个数组是6件,因为" color"和"尺寸"存储在单独的数组中。
我的问题是,如何将数据生成到这3个产品的数组中,并将所有数据放在同一个数组中。
Array(
[0] => Array
(
[code] => 123
[name] => box
[stock] => 2.00
[price] => 10.00
[color] => brown
)
[1] => Array
(
[code] => 123
[name] => box
[stock] => 2.00
[price] => 10.00
[size] => L
)
[2] => Array
(
[code] => 1234
[name] => box
[stock] => 3.00
[price] => 11.00
[color] => brown
)
[3] => Array
(
[code] => 1234
[name] => box
[stock] => 3.00
[price] => 11.00
[size] => XL
)
[4] => Array
(
[code] => 12345
[name] => box
[stock] => 4.00
[price] => 12.00
[size] => XL
)
[5] => Array
(
[code] => 12345
[name] => box
[stock] => 4.00
[price] => 12.00
[color] => gray
)
)
预期产出:
[0] => Array
(
[code] => 123
[name] => box
[stock] => 4.00
[price] => 12.00
[color] => gray
[size] => XL
)
我要做的就是将doubled数组合成一个。不要再乱用SQL了 - 它在一个表中获取属性名称,从另一个表中获取属性值,从另一个表中获取代码,股票,价格,从另一个表中获取名称。我知道只有这个阵列可以做一些事情,即使它只是一个临时的解决方案。
答案 0 :(得分:2)
你可以这样做:
假设您的数组是$ products
$merged = array();
foreach($products as $product) {
if (!isset($sorted[$product['code']])) {
$merged[$product['code']] = $product;
} else {
$merged[$product['code']] = array_merge($sorted[$product['code']], $product);
}
}
将产品代码用作数组键,然后合并数组。
答案 1 :(得分:1)
如果这两行始终是直接后继者,第一行持有color
字段,而后者则占据size
字段,您可以轻松地通过在for
循环中迭代它们:
$maxCount = count($array);
for ($i = 1; $i < $maxCount; $i += 2) {
$array[$i - 1]['size'] = $array[$i]['size'];
unset($array[i]);
}
这将迭代数组的每个第二个元素,并将size
字段添加到前一个字段。
如果您之后需要有成功的数组键,可以拨打$arry = array_values($array);
。
如果关联的行可能不是后继者,则需要根据其code
字段(如果是主键)映射它们。您可以使用array_reduce()
:
$desiredOutput = array_reduce($array, function($output, $element) {
if (!array_key_exists($element['code'], $output)) {
$output[$element['code']] = $element;
} elseif (array_key_exists('size', $element)) {
$output[$element['code']]['size'] = $element['size'];
} elseif (array_key_exists('color', $element)) {
$output[$element['code']]['color'] = $element['color'];
}
return $output;
}, []);