猿问

无法在foreach循环中存储数据,不断循环

我正在尝试将特定数据存储到中,array以便以后使用。


我试图通过键将数据存储在数组中。但是它不断循环的次数远远超过了需要的次数。我设置了一个条件,当row = "configurable"(应该是第5行或第6行)时,它将卸载数据并重新启动。因此,我可以将数据放入“可配置”行,然后重新开始。


我可能完全错了,但是我看不到另一种解决方法。我也尝试过将"For"循环放置在Foreach中,但是这给我带来了更多的循环问题。


($Ptype是在此循环外部声明的值。它应该每4-6行出现一次)


$rowArr = 


[1] => Array

    (

        [0] => 5.5

        [1] => sku123

        [2] => default

        [3] => simple

        [4] => testData4

        [5] => testData5

        [6] => testData6

    )

[2] => Array

    (

        [0] => 5.9

        [1] => sku456

        [2] => default

        [3] => simple

        [4] => testData4

        [5] => testData5

        [6] => testData6

    )

$ rowArr继续大约1000行。我想获取值[1]和[3],并在遇到“ if($ ptype =='configurable')”时放置它们。完成此操作后,我要在$ rowData数组内继续并重复直到再次执行if语句。


因此输出应为(我将对此进行格式化):


[5.5,简单,5.9,简单,...,...]


然后,如果满足if语句,则应将其删除,以便为新的值腾出空间。


   for ($i=1; $i < count($rowArr); $i++) {


    $Data[] = $rowArr[$i][1];

    $Data[] = $rowArr[$i][3];

    // without a "break;" here, it gets too many rows.

}



if($ptype == 'configurable'){


  $dataim = implode("," , $Data);

  echo $dataim . "\n";

  $dataim = "";


      // If I "die;" here, it fills the first row correctly, but it needs to get every row.

  reset($Data);

我也尝试过(我已经尝试过很多休息时间等):


for ($i=1; $i < count($rowArr); $i++) {


    $Data[] = $rowArr[$i][1];

    $Data[] = $rowArr[$i][3];


    if($ptype == 'configurable'){


        $dataim = implode("," , $Data);

        echo $dataim . "\n";

        $dataim = "";


        reset($Data);

        break;

    } 


}

总之:

  1. 存储另一个数组中的值[1]和[3]

  2. 一旦[3]值可配置,就转储数据并在阵列中重新开始。无限期继续,直到行完成。

实际结果:

  1. 只是一遍又一遍地循环前两个值,如果实现了中断,则不会获取任何其他数据。没有foreach循环中断,它将永远循环。

  2. 随着"die;"在for循环,它得到正确的数据,但只适用于第一行。


泛舟湖上清波郎朗
浏览 217回答 2
2回答

至尊宝的传说

在第一个代码示例中,因为没有中断条件,所以for循环将继续直到到达$ rowArr的末尾。在第二个代码示例中,循环过早结束,因为一旦$ ptype是“可配置的”,循环就不会再次开始。我用自己的$ rowArr做了一些测试,也许下面的代码可以为您提供帮助。$configurable = ["l", "w"];$rowArr = array(&nbsp; &nbsp; ["not-configurable", "a", "b", "c"],&nbsp; &nbsp; ["not-configurable", "d", "e", "f"],&nbsp; &nbsp; ["not-configurable", "g", "h", "i"],&nbsp; &nbsp; ["configurable", "j", "k", "l"],&nbsp; &nbsp; ["not-configurable", "m", "n", "o"],&nbsp; &nbsp; ["not-configurable", "p", "r", "s"],&nbsp; &nbsp; ["configurable", "t", "u", "w"],&nbsp; &nbsp; ["not-configurable", "x", "y", "z"]);for ($i=0; $i < count($rowArr); $i++) {&nbsp; &nbsp; $Data[] = $rowArr[$i][1];&nbsp; &nbsp; $Data[] = $rowArr[$i][3];&nbsp; &nbsp; if(in_array($rowArr[$i][3], $configurable)) {&nbsp; &nbsp; &nbsp; &nbsp; $dataim = implode("," , $Data);&nbsp; &nbsp; &nbsp; &nbsp; echo $dataim . "\n";&nbsp; &nbsp; &nbsp; &nbsp; $dataim = "";&nbsp; &nbsp; &nbsp; &nbsp; reset($Data);&nbsp; &nbsp; &nbsp; &nbsp; array_splice($rowArr, $i, 1);&nbsp; &nbsp; &nbsp; &nbsp; $i = -1;&nbsp; &nbsp; }&nbsp;}希望我能正确理解您要达到的目标。
随时随地看视频慕课网APP
我要回答