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()。