如何比较for循环中的每个值?

时间:2019-02-22 13:00:41

标签: php

我有一个包含5个项目的多维数组,我希望我的循环可以像这样比较它:

1 -> 2, 1 -> 3, 1 -> 4, 1 -> 5, 2->1, 2->3, 2->4, 2->5......// so on and 5 -> 4 in the end.

问题是我的数组$ i值匹配1并且$ j值匹配3之后,未完成设置,并且$ i值变为2(正确),并且$ j值变为4而不是3。告诉我为什么以及我做错了什么?

我的循环是:

    for ($i = 0; $i <= count($myArray); $i++) {
        for ($j = $i+1; $j <= count($myArray); $j++) {
            if (
                // condition 1
                && // condition 2
            ) {
                unset($myArray[$i]);
                $i++;
            }
        }
    }

4 个答案:

答案 0 :(得分:1)

我认为问题在于,当您取消设置数组中的元素时,会增加循环$i的计数器。这样,将删除未配置的数组元素,将保留此空数组位置,不会对其进行重新排序,您将必须手动执行此操作或使用array_values方法。

在数组的最后巡视中,它将中断,因为您正在比较数组元素的数量相等。您必须使用index < count($array)

代码如下:

for ($i = 0; $i < count($myArray); $i++) {
        for ($j = $i+1; $j < count($myArray); $j++) {
            if (
                // condition 1
                && // condition 2
            ) {
                unset($myArray[$i]);
                // $i++;
            }
        }
    }

答案 1 :(得分:0)

尝试这样的事情

  for ($i = 0; $i <= count($myArray); $i++) {
    for ($j = 0; $j <= count($myArray); $j++) {
        if ($j!=$i)
        {
             if (
            // condition 1
            && // condition 2
        ) {
            unset($myArray[$i]);
            $i++;
        }
        }

    }
}

答案 2 :(得分:0)

$temp = $myArray;
for ($i = 0; $i <= count($myArray); $i++)
{
    for ($j = $i + 1; $j <= count($myArray); $j++)
    {
        if (
            // condition 1
             && // condition 2
        )
        {
            unset($temp[$i]);
            $i++;
        }
    }
}
print_r($temp);

您的结果在$temp中。因此,这里的索引不会受到阻碍,您实际上是在$ temp上应用所有操作,并且通常会遍历$ myArray。

答案 3 :(得分:0)

老实说,我不知道为什么还没有人建议使用嵌套的foreach,因为大家都注意到数组大小存在问题。

foreach ($numbers as $number_horizontal_parsing) {
    foreach ($numbers as $number_vertical_parsing) {
        if ($number_horizontal_parsing != $number_vertical_parsing) {
            //do your stuff in your case it seems you want to compare both variables
        }
    }
}