【问题标题】:PHP foreach dynamic an arrayPHP foreach 动态数组
【发布时间】:2019-08-11 11:45:40
【问题描述】:

首先谢谢你。 代码:

 $flag=1;
 foreach( $questionidset as $oneqid)
{

   if($oneqid%23==0)
   {
     if($flag<3)
    {
       array_push($questionidset, 23*$flag);
        $flag++;
    }

   }

}

print_r($questionidset);

问题: 如何在推送新元素后使 foreach 获得动态 $questionidset。

比如原来的$questionidset是{1,2,23}
输出应该是:{1,2,23,23,46}

我的目的是在将一个新元素推送到名为 $questionidset 的原始数组后,foreach 循环时间可以获得增量

【问题讨论】:

  • 嗨,Allen - 每次循环遍历数组时,您的 $flag 变量都会重置为 1。因此,当您到达 array_push 时,$flag 将始终为 1。
  • 太好了,这个答案可能会对您的问题有所帮助:stackoverflow.com/a/28217055/213599
  • 谢谢。但它不是一个类似的。我的目的是在将新元素推送到名为 $questionidset 的原始数组后,foreach 循环时间可以增加。
  • 是的,我跟着。在该答案中,它提到您不能在 foreach 循环中向数组添加元素。您需要使用额外的循环或不同类型的循环。

标签: php arrays dynamic foreach


【解决方案1】:

试试这个,

$flag = 1;
$length = 2;
$questionidset = [1, 2, 23];
for ($i = 0; $i < count($questionidset); $i++) {
    if ($questionidset[$i] % 23 == 0) {
        $questionidset[] = 23 * $flag;
        $flag++;
        if( $flag > $length )
            break;
    }
}

print_r($questionidset);

//This outputs : [1,2,23,23,46]
//if you increase length to 5
//The output will be : [1,2,23,23,46,69,92,115]

不确定为什么它不迭代 n 次,其中 n 是输出中的元素数, 但是你总是可以用下面的递归来解决这个问题,它精确地迭代 n 次,其中 n 是输出中的元素数。

$flag = 1;
$length = 2;
$questionidset = [1, 2, 23];
$count = count($questionidset);
$start = 0;

function for_loop(&$arr, $count, $i, &$flag, $length) {
    if ($i+1 > $count)
        return;
    if ($arr[$i] % 23 == 0) {
        $arr[] = 23 * $flag;
        $flag++;
        $count++;
        $i++;
        if($flag > $length)
           return;
        else 
           for_loop($arr, $count, $i, $flag, $length);
    }
    $i++;
    for_loop($arr, $count, $i, $flag, $length);
}

for_loop($questionidset, $count, $start, $flag, $length);

print_r($questionidset);

注意:- 一些参数是通过引用传递的。

【讨论】:

  • 感谢您的回答。但我认为这段代码也会以原始数组 $questionidset 的长度结束。我在想的是,在将新元素推入 $questionidset 后,条件 $i
  • @AllenLiu 以及您认为如何停止 for 循环,条件是什么?
  • 嗨,这段代码运行良好。在我的工作案例中,我将找出需要先追加多少个孩子。我在最外面使用了一个 for 循环。感谢您的回答
猜你喜欢
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 2010-11-13
相关资源
最近更新 更多