0

如果第二个数组的值是第一个数组的值的平方,我想要一个返回 true 的函数。像这样不起作用,因为它总是返回 true。你知道问题出在哪里吗?

function verify($arrayA, $arrayB){
    for($a=0; $a <= count($arrayA); $a++){
            if(in_array(pow($arrayA[$a], 2), $arrayB)){
                echo "y";
                return true;
            }
            else{
                echo "n";
                return false;
             }
    }
}

$arrayA = [1, 2, 2];
$arrayB = [1,7,8];

$result = verify($arrayA, $arrayB);
print_r($result);
4

2 回答 2

1

您在第一次迭代中退出循环......总是。

如果正方形在另一个数组中,则不应退出循环,而应继续检查下一个。只有当循环可以进行所有迭代(不返回false)时,您才能得出结论是可以的:

function verify($arrayA, $arrayB){
    for($a=0; $a <= count($arrayA); $a++){
        if(!in_array(pow($arrayA[$a], 2), $arrayB)){
            echo "n";
            return false;
         }
    }
    echo "y";
    return true;
}
于 2019-03-01T19:27:23.807 回答
0

您在这里有两个问题:

  • 首先,您只检查第一个数组元素,因为如果您的条件为真或假,您都退出函数,如果 的当前元素$arrayB不等于 的平方当前元素,则应返回假$arrayA,否则继续处理。
  • 其次,您使用 in_array() 函数,它在所有$arrayB数组中查找,因此如果所有元素$arrayA都具有其平方值,$arrayB则无论出现的顺序和出现次数如何,您的函数都将返回 true。你应该检查$arrayA[$a]$arrayB[$a]元素。
于 2019-03-01T19:28:09.120 回答