PHP foreach динамический массив - PullRequest
1 голос
/ 20 марта 2019

Сперва спасибо. КОД:

 $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 могло получить приращение

1 Ответ

0 голосов
/ 21 марта 2019

Попробуйте это,

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

Примечание: - Некоторые параметры передаются по ссылке.

...