for loop - 不可理解的行为

时间:2014-11-12 16:26:49

标签: php arrays for-loop

我有这些for循环:

for ($x = 0; $x<2;$x++){

$allproducts = array();
for ($y = 0; $y<105;$y++) {   //<<<<<<<<<<<<< this (105) is the number I mean
    $allproducts[] = 'test'.$y;
}

echo "<pre>";
echo "allproducts 0 -- ";

var_dump($allproducts);

echo "</pre>";

for ($i = 0; $i < count($allproducts); $i++) {


    $result = array_slice($allproducts, 0, 20);

    echo "<pre>";
    echo "result --  ";
    var_dump($result);
    echo "</pre>";


    $allproducts = (array_diff($allproducts, $result));

    echo "<pre>";
    echo "allproducts 1 -- ";
    var_dump($allproducts);
    echo "</pre>";
}}

在实际代码中(此处:)

for ($x = 0; $x<1;){
    $allproducts = array();
    $abfrage = "SELECT sku FROM skulist";
    if ($result = $sql->query($abfrage))
    {
        while ($row = $result->fetch_assoc()) {
            $allproducts[] = $row['sku'];
        }
    }

    for ($i = 0; $i < count($allproducts); ++$i) {
        $result = array_slice($allproducts, 0, 20);
        $allproducts = (array_diff($allproducts, $result));

//.... more code 

}}

...我从DB获取数据而不是for循环:

$allproducts = array();
for ($y = 0; $y<105;$y++) {   //<<<<<<<<<<<<< this (105) is the number I mean
    $allproducts[] = 'test'.$y;
}

但改为显示/更容易重建。


行为相同:

当我的数组中有105个条目时,我没有得到

的空数组输出
echo "allproducts 1 -- ";
var_dump($allproducts);

这是期望的行为。

当我将105更改为(例如)65时,它会输出一个空数组

allproducts 1 -- array(0)

在第二个嵌套循环结束时:

for ($i = 0; $i < count($allproducts); $i++) {

现在我有 三个问题

  • 为什么会这样?我没有区别
  • 我怎么能实现,最后没有空数组? (停止我的程序工作)
  • 我在每个$ result数组中需要20个值

1 个答案:

答案 0 :(得分:2)

for ($i = 0; $i < count($allproducts); $i++) {
    // ...
    $allproducts = (array_diff($allproducts, $result));

您正在更改您的$allproducts数组!那么你怎么能期望它可靠地运作呢?

相反,请尝试:

foreach( $allproducts as $i => $product)

虽然我必须承认我不确定你要做什么。