Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 循环一个数组值,同时将其与另一个数组值联接_Php_Arrays_Loops_Join_Foreach - Fatal编程技术网

Php 循环一个数组值,同时将其与另一个数组值联接

Php 循环一个数组值,同时将其与另一个数组值联接,php,arrays,loops,join,foreach,Php,Arrays,Loops,Join,Foreach,我有两个数组 $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 start

我有两个数组

$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
对于这类东西,使用是非常棒的:

$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
开始。

对于这类东西,使用是非常棒的:

$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 = 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);

一旦
$i
达到
$count
$i%$count
将再次从
0
开始。这里有一个版本,无论两个数组的长度或索引是什么,它都可以工作:

$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);
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;
}
函数zip(数组$a1,数组$a2){
$a1=数组_值($a1);//重新索引
$a2=数组_值($a2);//重新索引
$count1=计数($a1);
$count2=计数($a2);
$results=array();
对于($i=0;$i

这是一个无论两个数组的长度或索引是什么都可以使用的版本:

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;
}
函数zip(数组$a1,数组$a2){
$a1=数组_值($a1);//重新索引
$a2=数组_值($a2);//重新索引
$count1=计数($a1);
$count2=计数($a2);
$results=array();
对于($i=0;$i

这会使
$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);
?>

  • (测试用例,
    $b
    非常小)

    • 这会使
      $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);
      ?>
      
      
      
      • (测试用例,
        $b
        非常小)

      如果
      $a
      有100个项目,
      $b
      有10个项目(基本上,如果
      计数($a)/count($b)>=2
      )怎么办?只有当
      $b
      的大小至少是
      $a
      的一半时才有效:@Xeon06:即使如此,如果数组没有数字索引,它仍然不够好IMHO:a)不能正常工作,b)如果您还想在较短的时间内“扩展”
      $a
      ,那么要使其正常工作将是一件非常繁琐的事情(这里您不需要,但函数中的不对称行为是一个bug生成器),c)添加所有这些重复元素实际上没有什么好处:您仍然可以编写一行循环体,而不必这样做。值得思考的是——这也是我考虑过的一种方法:)@Jon的确,Goldie的解决方案是最好的。如果
      $a
      有100个项目,
      $b
      有10个项目(基本上,如果
      count($a)/count($b)>=2怎么办?仅当
      $b
      至少是
      $a
      大小的一半时才起作用:@Xeon06:即使如此,它仍然不够好。IMHO:a)如果数组没有数字索引,则无法正常工作;b)如果要在较短的时间内“扩展”
      $a
      ,则要使其正常工作将是一件非常繁琐的事情(这里您不需要,但函数中的不对称行为是一个bug生成器)和c)添加所有这些重复元素实际上没有任何好处:您仍然可以编写一行循环体,而不必这样做。只是一些思考的问题——这也是我思考的一种方法:“乔恩确实,Goldie的解决方案是最好的。我只需要等几分钟:)@Goldie Cool,很高兴我能帮忙:)考虑接受答案。我只需要等几分钟:)@Goldie Cool,很高兴我能帮上忙:)你应该看看range()。你应该看看range()。