【问题标题】:Loop an array values while joining them to another array values循环一个数组值,同时将它们连接到另一个数组值
【发布时间】:2011-10-27 15:51:00
【问题描述】:

我有两个数组

$a = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p');
$b = array('1','2','3','3','4','2','1','4','2','2');

数组 $a 有时有更多的值。

我需要加入这两个数组,但对于结果,我需要循环数组 $b 的值,只要存在数组 $a 的值。

结果应该是这样的

a1
b2
c3
d3
e4
f2
g1
h4
i2
j2
k1 // array $b starts to loop here
l2
m3
n3
o4
p2

【问题讨论】:

  • 你应该看看 range()。

标签: php arrays loops join foreach


【解决方案1】:

使用modulo (php: %) 来处理这类事情真是太棒了:

$i = 0;
$count = count($b);
foreach($a as $val1){
    echo $val1, $b[$i++ % $count];
    // if you don't want to echo, do something else :)
}

一旦$i 到达$count$i % $count 将再次从0 开始。

【讨论】:

  • 考虑接受的答案。我只需要等待几分钟 :)
  • @Goldie Cool,很高兴我能帮上忙 :)
【解决方案2】:
$i = 0;
$result = array();

foreach ($a as $val) {
  if (isset($b[$i])) {
    $result[] = $val.$b[$i++];
  } else {
    $result[] = $val.$b[0];
    $i = 1;
  }
}

print_r($result);

【讨论】:

    【解决方案3】:

    无论两个数组的长度或索引是什么,这里都有一个版本:

    function zip(array $a1, array $a2) {
        $a1 = array_values($a1); // to reindex
        $a2 = array_values($a2); // to reindex
    
        $count1 = count($a1);
        $count2 = count($a2);
    
        $results = array();
        for($i = 0; $i < max($count1, $count2); ++$i) {
            $results[] = $a1[$i % $count1].$a2[$i % $count2];
        }
    
        return $results;
    }
    

    See it in action

    【讨论】:

      【解决方案4】:

      这使得$b“循环”直到它和$a一样大。

      <?php
          $a = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p');
          $b = array('1','2','3','3','4','2','1','4','2','2');
          while(count($b) < count($a))
              $b = array_merge($b, array_splice($b, 0, count($a) - count($b)));
      
          print_r($a);
          print_r($b);
      ?>
      

      【讨论】:

      • 如果$a 有 100 个项目,$b 有 10 个项目(基本上,如果 count($a) / count($b) &gt;= 2)呢?
      • 仅当$b 至少是$a 大小的一半时才有效:codepad.org/Oa3EdqVk
      • @Xeon06:即使如此,恕我直言,它仍然不够好:a)如果数组没有数字索引,则无法正常工作,b)如果您愿意,使其正常工作将是一件很麻烦的事也可以“扩展”$a,当它更短时(here 你不需要,但是像函数中这样的不对称行为是一个错误生成器),并且 c)添加确实没有任何收获所有这些重复的元素:您仍然可以编写单行循环体而不这样做。只是一些值得思考的东西——这也是我考虑过的一种方法:)
      • @Jon 确实,Goldie 的解决方案是最好的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      • 2023-01-19
      相关资源
      最近更新 更多