如何基于具有相同"名称"?

时间:2017-04-25 15:34:25

标签: php arrays multidimensional-array

我希望基于一系列产品创建一个独特的数组,例如:

$orderProducts = array (
array('name' => 'Series 101. Pure Red Sable', 'price' => 4),
array('name' => 'Series 101. Pure Red Sable', 'price' => 6),
array('name' => 'Series 101. Pure Red Sable', 'price' => 8),
array('name' => 'Series 101. Pure Red Sable', 'price' => 10),
array('name' => 'Series 101. Pure Red Sable', 'price' => 12),
array('name' => 'Series 222', 'price' => 5),
array('name' => 'Series 222', 'price' => 5),
array('name' => 'Series 1', 'price' => 7),
array('name' => 'Series 1', 'price' => 7),
);

目标是创建一个包含单个名称迭代的数组,以及它们的价格总和。 例如,所有101系列。纯红貂将是40。 然后,我想把它们放在一个新的独特数组中,如下所示:

$newProductsArray = array (
array('name' => 'Series 101. Pure Red Sable', 'price' => 40),
array('name' => 'Series 222', 'price' => 10),
array('name' => 'Series 1', 'price' => 14),
);

我使用的是PHP 5.4.12版,但我手动添加了 array_column 功能,并通过实验来实现我的目标,但没有成功。也许可以扩展功能以创建所需的结果?

function array_column($array,$column_name)
{
  return array_map(function($element) use($column_name){return  $element[$column_name];}, $array);
}

1 个答案:

答案 0 :(得分:1)

简单foreach会帮助你。

Try this code snippet here     

ini_set('display_errors', 1);
$orderProducts = array(
    array('name' => 'Series 101. Pure Red Sable', 'price' => 4),
    array('name' => 'Series 101. Pure Red Sable', 'price' => 6),
    array('name' => 'Series 101. Pure Red Sable', 'price' => 8),
    array('name' => 'Series 101. Pure Red Sable', 'price' => 10),
    array('name' => 'Series 101. Pure Red Sable', 'price' => 12),
    array('name' => 'Series 222', 'price' => 5),
    array('name' => 'Series 222', 'price' => 5),
    array('name' => 'Series 1', 'price' => 7),
    array('name' => 'Series 1', 'price' => 7),
);
$result=array();
foreach($orderProducts as $value)
{
    if(!isset($result[$value["name"]]))
    {
        $result[$value["name"]]=$value;
    }
    else
    {
        $result[$value["name"]]["price"]+=$value["price"];
    }
}
print_r(array_values($result));

解决方案2:

$result=array();
array_map(function($value) use (&$result){
    if(!isset($result[$value["name"]]))
    {
        $result[$value["name"]]=$value;
    }
    else
    {
        $result[$value["name"]]["price"]+=$value["price"];
    }
}, $orderProducts);
print_r(array_values($result));