繁体   English   中英

php - 通过键条件创建新数组并用另一个数组值填充

[英]php - create new array by key condition and fill by another array value

我正在尝试通过检查索引号来创建新数组并用另一个数组填充该索引。

如果当前元素索引在索引 4 中,则在循环中

它将从另一个数组中获取值。

position 上的值将移至下一个循环。

我目前的两个数组是这样的

$arr1 = array(
    0 => 'number 1', 
    1 => 'number 2',
    2 => 'number 3',
    3 => 'number 4',
    4 => 'number 5',
) ;


$arr2 = array(
    0 => 'number 4 insert', 
    1 => 'number 8 insert',
    2 => 'number 12 insert',
    3 => 'number 16 insert',
    4 => 'number 24 insert',
) ;

我期望的新数组我想要这样

Array
(
    [0] => 'number 1',
    [1] => 'number 2',
    [2] => 'number 3',
    [3] => 'number 4 insert',
    [4] => 'number 4',
    [5] => 'number 5',
    [6] => 'number 6',
    [7] => 'number 8 insert',
    [8] => 'number 7',
    [9] => 'number 8',
    [10] => 'number 9',
    [11] => 'number 12 insert',
    [12] => 'number 10',
    ...
    ...
)

对于这个解决方案,我正在尝试这个,但它通常不是通过在我想要的选定键索引上推送值来替换我的主数组值。

$arr1 = array(
    0 => 'number 1', 
    1 => 'number 2',
    2 => 'number 3',
    3 => 'number 4',
    4 => 'number 5',
) ;


$arr2 = array(
    0 => 'number 4 insert', 
    1 => 'number 8 insert',
    2 => 'number 12 insert',
    3 => 'number 16 insert',
    4 => 'number 24 insert',
) ;


function match_arrayKeys ($x, $y,$z)
{
    $keys    = array_keys ($x);
    
    $keysy    = array_keys ($y);

    for ($i = 0; $i < count ($keys); $i++)
    {
        $j = $i+1;
        if($j%$z== 0 ){
            $newarray [$i] = $y[$i-1];
        } else {
          $newarray [$i] = $x[$i];
        }
        
    }
    return $newarray;
}

print_r (match_arrayKeys ($arr1,$arr2, 4));

小提琴

你可以尝试这样的事情:

function match_arrayKeys($arr1, $arr2, $gap)
{
    $index = $gap - 1;
    while ($element = array_shift($arr2)) {
        array_splice($arr1, $index, 0, $element);
        $index += $gap;
        if ($index > count($arr1)) break;
    }
    return $arr1;
}

print_r(match_arrayKeys($arr1, $arr2, 4));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM