PHP Group Array Data - Make,Model,SKU

时间:2014-03-13 11:16:34

标签: php mysql arrays

我正在使用mysql查询返回一系列产品,这些产品适用于php中的某些汽车,看起来像这样;

array { 

[0]=> array(3) { 
    ["sku"]=> string(16) "123a " 
    ["make"]=> string(20) "Ford" 
    ["model"]=> string(25) "Escort" 
    } 

[1]=> array(3) { 
    ["sku"]=> string(16) "123b" 
    ["make"]=> string(20) "Ford" 
    ["model"]=> string(25) "Escort" 
    } 

[2]=> array(3) { 
    ["sku"]=> string(16) "123c" 
    ["make"]=> string(20) "Ford" 
    ["model"]=> string(25) "Focus" 
    } 

[3]=> array(3) { 
    ["sku"]=> string(16) "123d" 
    ["make"]=> string(20) "Alfa Romeo" 
    ["model"]=> string(25) "159" 
    } 

[4]=> array(3) { 
    ["sku"]=> string(16) "123e" 
    ["make"]=> string(20) "Alfa Romeo" 
    ["model"]=> string(25) "159" 
    } 

}

我正在尝试研究如何使用foreach循环来遍历数据,最后得到一个新的分组/嵌套数组,这些数组将是这样的;

[Ford]=>
{["model"]=>"Escort" ["skus"]=>("123a", "123b)}
{["model"]=>"Focus" ["skus"]=>("123c")}

["Alfa Romeo]=>
{["model"]=>"159" ["skus"]=>("123d", "123e")}

因此,我希望将所有记录分组为' make',sub group by make& amp;模型然后把所有的skus放在一起制作模型组合。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

你可以做这样的事情(输出不是你要求的,但更容易使用):

$output = array();
foreach ($cars as $car) {
    $output[$car['make']][$car['model']][] = $car['sku'];
}

这会给你以下输出:

[Ford] => Array
    [Escort] => Array
        [0] => 123a
        [1] => 123b
    [Focus] => Array
        [0] => 123c
[Alfa Romeo] => Array
    [159] => Array
        [0] => 123d
        [1] => 123e

Demo

答案 1 :(得分:0)

此循环给出了预期的结果:

$summary = array();

foreach ($data as $row)
{
    if (!isset($summary[$row['make']]))
    {
        $summary[$row['make']][] = array(
            'model' => $row['model'],
            'skus'  => array($row['sku'])
        );
    }
    else
    {
        $modelExist = false;

        foreach ($summary[$row['make']] as $i => $make)
        {
            if ($make['model'] == $row['model'])
            {
                $summary[$row['make']][$i]['skus'][] = $row['sku'];
                $modelExist = true;
                break;
            }
        }

        if (!$modelExist)
        {
            $summary[$row['make']][] = array(
                'model' => $row['model'],
                'skus'  => array($row['sku'])
            );
        }
    }
}