我有一个包含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++;
}
}
}
答案 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
}
}
}