按相同的模型和条件计算foreach循环

时间:2013-12-05 22:56:58

标签: php foreach

我想获得foreach循环中值的计数(总数),它们共享相同的“模型”和“条件”。

为了帮助您更好地理解,以下是我的数据的表示方式

 Product Name            |    Condition
 ---------------------------------------
 iPhone 3G 16GB          |    Used

 iPhone 3G 16GB          |    Used

 iPhone 3G 16GB          |    New

 Blackberry 9900         |    New

 Blackberry 9900         |    New

我目前的foreach循环: -

 $results = getProducts();

 foreach ($results as $result) {

 $data[] = array (
'model' => $result['model'],
'condition' => $result['condition']
 );  
}

这是我目前的foreach循环所得到的: -

 Array (

[0] => Array
    (
        [model] => iPhone 3G 16GB
        [condition] => Used
    )

[1] => Array
    (
        [model] => iPhone 3G 16GB
        [condition] => Used
    )

[2] => Array
    (
        [model] => iPhone 3G 16GB
        [condition] => New
    )
[3] => Array
    (
        [model] => Blackberry 9900
        [condition] => New
    )
[4] => Array
    (
        [model] => Blackberry 9900
        [condition] => New
    )
)

以下是我想要的方式和内容: -

 Array(
 'Apple iPhone 3G 16GB' => Array (
 'Used' => 2,
 'New' => 1
 )
 'Blackberry 9900' => Array (
 'New' => 2 
 )
)

希望您了解我在这里要完成的任务。如果您希望我提供任何其他信息,请与我们联系。

2 个答案:

答案 0 :(得分:2)

这应该会给你想要的结果。

$data = array();
foreach ($results as $result) {
    if (!array_key_exists($result['model'], $data)) {
        $data[ $result['model'] ] = array(
            'Used' => 0,
            'New' => 0
        );
    }
    $data[ $result['model'] ][ $result['condition'] ]++;
}

请注意,PHP中的字母索引区分大小写,因此您可能需要添加strtolower()以避免未定义的索引通知。

答案 1 :(得分:0)

$results = array(
    array('model' => 'Apple iPhone 3G 16GB', 'condition' => 'used'),
    array('model' => 'Apple iPhone 3G 16GB', 'condition' => 'used'),
    array('model' => 'Apple iPhone 3G 16GB', 'condition' => 'new'),
    array('model' => 'Blackberry 9900', 'condition' => 'new'),
    array('model' => 'Apple iPhone 3G 16GB', 'condition' => 'new'),
    array('model' => 'Blackberry 9900', 'condition' => 'used')
);

$data = array();

foreach($results as $result) {
    $model = $result['model'];
    $condition = $result['condition'];
    if(array_key_exists($model, $data)) {
        $data[$model][$condition]++;
        continue;
    }
    $data[$model][$condition] = 1;
}

var_dump($data);