有两个阵列,第二阵列将总是从第一阵列被1小。第一阵列包含数字和第二阵列包含数学运算符。
$arr1 = [210,11,12];
$arr2 = ['-','/'];
我所编写的代码是唯一的工作在这个测试情况下,但是当我增加它的元素的数量。它失败。
$arr1 = [210,11,12,12];
$arr2 = ['-','/','/'];
在代码中,我到目前为止已经试过..
$arr1 = [210,11,12];
$arr2 = ['-','/'];
$arr3 = [];
for($i=0;$i<count($arr1);$i++){
if($i == 0){
$arr3[] = $arr1[0];
}
if ($i % 2 != 0) {
$arr3[] = $arr1[$i];
}
else {
if($i < (count($arr2)-1)){
$arr3[] = $arr2[$i];
}else{
$arr3[] = $arr2[$i-1];
}
}
}
array_push($arr3,end($arr1));
print_r($arr3);
预期的结果将是
$arr3 = [210,'-',11,'/','12','/','12']
提供的,就像你说的,第二阵列始终是一个元件大,那么这将是一个简单的方法来做到这一点:
function foo(array $p, array $q): array {
$r = [array_shift($p)];
foreach ($q as $x) {
$r[] = $x;
$r[] = array_shift($p);
}
return $r;
}
print_r(
foo([210,11,12], ['-', '/'])
);
print_r(
foo([210,11,12,12], ['-','/','/'])
);
如果阵列的索引被很好地形成,上面的程序可以被简化为:
function foo(array $p, array $q): array {
$r = [$p[0]];
foreach ($q as $i => $x) {
$r[] = $x;
$r[] = $p[$i + 1];
}
return $r;
}
您可以通过列转换为行与array_map
,然后合并行的两个阵列混合在一起。
$arr3 = array_merge(...array_map(null, $arr1, $arr2));
array_pop($arr3);
该array_map(null, $arr1, $arr2)
表达将导致
[[210, '/'], [11, '/'], [12, '/'], [12, null]]
然后,array_merge(...)
结合了所有的内阵列连成一片的最终结果。
array_pop
将删除后null
这是因为两个数组的大小不均的存在,但如果你打算结束这个爆,输出的结果作为一个数学表达式,你不需要做,因为这韩元“T露面呢。事实上,如果是这样的目标,你可以直接添加implode
上述表达。
echo implode(' ', array_merge(...array_map(null, $arr1, $arr2)));
环路中的第一阵列和使用$key =>
。
然后你建立在循环的新数组,如果$arr2
具有相同的密钥值,该值$arr1
后添加。
$arr1 = [210,11,12,12];
$arr2 = ['-','/','/'];
foreach($arr1 as $key => $val){
$arr3[] = $val;
if(isset($arr2[$key])) $arr3[] = $arr2[$key];
}
var_dump($arr3);
//[210, -, 11, /, 12, /, 12]