从组数组中读取

时间:2012-01-12 00:01:49

标签: php arrays offset

+---------------+-----------------+
| Type          |  Price          |
+---------------+-----------------+
| Music         |  19.99          |
| Music         |   3.99          |
| Music         |  21.55          |
| Toy           |  89.95          |
| Toy           |   3.99          |
| Phones        |  99.99          |
| Phones        |  89.99          |
+---------------+-----------------+

我使用以下代码显示如下数据:

// Get the sum
$group = array();
foreach($rows as $r){
  $group[$r->type] = $group[$r->Type] + $r->Price;
}

// Display
foreach($group as $type=>$price){
  echo "Type:".$type." Price: ".$price;
}

结果:

Music  | 45.53
Toy    | 93.94
Phones | 189.98

我的问题是如何从第二条记录开始显示数组($group)中的数据,以及如何只显示数组中的一条记录。

3 个答案:

答案 0 :(得分:4)

尝试使用array_slice();

//this will create new array without first element
$new_group = array_slice($group, 1);

现在像以前一样迭代$new_group

答案 1 :(得分:2)

如果内存不是问题(数组不是很大),请使用array_slice作为suggested by Peter Krejci。但是,如果 是一个问题,那么您将希望通过简单地跳过第一个元素来避免重复所有数据:

$first = true;
foreach ($group as $type=>$price) {
    if ($first) {
        $first = false;
        continue;
    }
    echo "Type:", $type, " Price: ", $price;
}

我正在使用这种方法而不是直接数字索引,因为无法保证索引是无间隙的。也可以使用内部指针函数,例如next,但在 Iterator 接口的这个时代,这些函数已经失宠了。

  

还如何只显示数组中的一条记录

这取决于您希望通过哪种标准访问它。如果你想按类型进行,你可以简单地说:

echo $group['Music'];

答案 2 :(得分:1)

尝试array_shift($group),然后尝试foreach()

来自array_shift() documentation

  

array_shift()关闭数组的第一个值并返回它,   将数组缩短一个元素并将所有内容向下移动。所有   数字数组键将被修改为从零开始计数   而文字键不会被触及。