【发布时间】:2023-04-07 19:27:01
【问题描述】:
我正在编写一个递归函数来打印出 2 个多维 php 数组之间的差异。此代码的目的是查看 jpeg 标头之间的差异,以确定 adobe bridge cs3 如何在 jpg 文件中保存评级信息。
当我使用我的 eclipse - zend 调试器 ide 单步执行代码时,似乎即使初始 if 语句为假(即,两个值都不是数组),后续 elseif 语句也不会执行。函数附在下面。
注意:自基于 cmets 的原始帖子以来的更改
添加了默认级别=''
删除了 if{} elseif{} 块之间的 cmets
删除了一个else;在没有功能的块的末端
对 符号进行编码,以便尖括号会显示在我的代码中
”。 $级别。 $key ."=>" 。 $ 价值 1 。 “作为数组,与”相比。 $value2 ."
"; } elseif($value1 != $value2){ // 值不匹配,打印差异 打印“
”。 $级别。 $key ."=>" 。 $value1 ." != " . $value2 ."
"; } } 别的{ 打印“
”。美元级别。 $键。 “在array2中不存在”; } } }
【问题讨论】:
-
您能给我们提供您用于
$array1和$array2的样本 -
也许你误会了——如果 value1 和 value2 都是数组,那么第一个 if 语句的计算结果为 true,并且 elseifs 将被忽略...如果一个值是数组而另一个是数组,则第一个 elseif 应该触发不对?此外,(我认为)is_array 将返回 true/false - 所以使用“!==”而不是“!=”是一个好习惯。
-
是的,我确实打错了。我已经更正了原始问题中的示例。问题出现在比较第一个数组的第二级递归中,即 item1[0][n] 与 item2[0][n] 两者的值现在都是整数。
-
Josh - 我到达原始“if”的行,然后它跳回到循环的顶部并比较列表中的下一个项目。
-
thetaiko - 我使用的数组非常大。它们是图像文件中的 jpeg 标头,至少有 4 个维度和维度内的许多元素。如果我使用 print_r() 打印数组,它会超出 32K 长度限制。
标签: php recursion control-flow