【问题标题】:How can I retrieve data from an array, 3 at a time?如何从数组中检索数据,一次 3 个?
【发布时间】:2010-10-06 14:25:09
【问题描述】:

在 PHP 中有没有更好的方法来访问这个数组,每组三个?

假设我的数组是一个逗号分隔的字符串,例如:

("Thora","Birch","Herself","Franklin Delano","Roosevelt","Himself (archive footage)","Martin Luther","King","Himself (archive footage) (uncredited)")

虽然数组最终会变得更大,但每个数组都会有所不同,但仍属于三个(名字、姓氏、角色)的逻辑组。

我想要完成的是以三个为一组的数组循环,这样第一条记录就会有firstname[0]=>"Thora", lastname[0]=>"Birch" and role[0]=>"Herself".

我只习惯了foreach 循环,但没有看到像“for each 3”这样的额外参数,所以也许有人可以解释一下?

【问题讨论】:

  • 你必须使用for()来一步步3,我不知道有什么函数可以直接做。

标签: php arrays loops


【解决方案1】:

PHP 有一个名为 array_chunk 的函数专门用于此任务。

试试这个:

$sets = array_chunk($people, 3);
foreach ($sets as $set) {
  //you could use the following line to put each field into a nice variable
  list ($firstname, $lastName, $role) = $set;

  //if all you want to do is collect the values, do this 
  $firstNames[] = $set[0];
  $lastNames[] = $set[1];
  $role[] = $set[2];
}

请注意,最后一个块的大小可能不是 3,因此如果您不能保证数组的长度始终是 3 的倍数,则应检查键 1 和 2 是否已使用 isset 设置。

【讨论】:

  • 确保调用 array_chunk 的块大小为:array_chunk($people, 3)
  • 这个我没听说过,谢谢帮助!明天我要试一试,看起来又漂亮又优雅!
  • 在不同的数组函数中查看 PHP 手册是值得的,尤其是当您要在自己的代码中重新发明轮子时!可能有一个内置函数。
  • 感谢 David,这个功能对我的工作很有帮助,列表功能的帮助更大。
【解决方案2】:

您可以为此使用for-loop,假设您的“人”数组的长度为3n

$people = array("Thora","Birch","Herself","Franklin Delano","Roosevelt","Himself (archive footage)","Martin Luther","King","Himself (archive footage) (uncredited)");
$firstName = array();
$lastName = array();
$role = array();
for($i=0; $i<count($people); $i += 3){
   $firstName[] = $people[$i];
   $lastName[] = $people[$i+1];
   $role[] = $people[$i+2];
}

【讨论】:

    【解决方案3】:

    怎么样 伪代码

    for Index = 0 index = length index +=3
    {
       Firstname= array[index]
       middlename = array[index+1]
       lastname = array[index+2]
       Do Something with them...
    }
    

    【讨论】:

    • 我不是 PHP 程序员,但我无法想象这不完全符合要求。
    【解决方案4】:

    或者,如果您使用 PHP >= 5.3:

    array_walk(
            range(1,9),//<== normally your array, range(1,9) is just an example/test value
            function($value,$key) use (&$return){
                     $return[$key % 3][] = $value;
            });
    var_dump($return);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-12
      • 2022-11-10
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 2021-07-21
      • 1970-01-01
      相关资源
      最近更新 更多