【问题标题】:php - create new array by key condition and fill by another array valuephp - 通过键条件创建新数组并用另一个数组值填充
【发布时间】:2021-03-13 13:02:54
【问题描述】:

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

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

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

并且该位置的值将移动到下一个循环。

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

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

FIDDLE

【问题讨论】:

  • 这个期望的顺序背后的逻辑是什么?为什么你的字符串在需要插入时会说“replaced”?
  • @El_Vanja 好的,我更改了字符串文本。
  • $arr2 来自哪里?将$arr2 的键更新为结果数组中您想要每个元素的位置是否会使这项任务更容易?比如$arr2 = [3 =&gt; 'number 4 insert', 7 =&gt; 'number 8 insert']?
  • 让我看看我是否理解您的问题:您有一个数组,其输入格式为“数字 i”,其中 i 是元素的索引,数字 z 是整数。现在在传递给函数时,您希望每个第 z 个元素都说“数字 z 被替换”?是这样吗?

标签: php arrays loops for-loop foreach


【解决方案1】:

你可以试试这样的:

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

【讨论】:

  • 感谢您的回答。它关闭了..我想要两个数组中的所有值。也将根据位置显示第二个数组值。
  • 只要去掉中断条件即可。然后第二个数组的其余部分将在最后。您描述的原始数组的预期结果并不完全清楚。它的尺寸超过了原来的两个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
  • 2012-09-11
相关资源
最近更新 更多