【问题标题】:Read from group array从组数组中读取
【发布时间】:2012-01-12 00:01:48
【问题描述】:
+---------------+-----------------+
| 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) 中的数据,以及如何只显示数组中的一条记录。

【问题讨论】:

    标签: php arrays offset


    【解决方案1】:

    尝试使用array_slice()

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

    现在像以前一样遍历$new_group

    【讨论】:

    • 精彩的答案。我将对其进行编辑以将偏移量设置为 0 并将长度设置为 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'];
    

    【讨论】:

    • 我对此很陌生,无法弄清楚如何实施您的方法。都一样谢谢。我相信它会在未来有所帮助,并且肯定会帮助其他人。
    【解决方案3】:

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

    来自array_shift() documentation

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      相关资源
      最近更新 更多