PHP检查数组中的多个值是全部为正还是全部为负或部分为负

时间:2018-11-21 09:15:51

标签: php

我有一个包含2个可能值negativepositive的数组。如果所有值均为positive,则我的函数必须返回positive

如果所有值均为negative,则我的函数必须返回negative。如果这些值是混合值,则我的函数必须返回partly

我的代码总是返回partly,不幸的是,我不知道为什么。

 const RESULT_OF_SEARCH_POSITIVE = "positive";
    const RESULT_OF_SEARCH_NEGATIVE = "negative";
    const RESULT_OF_SEARCH_PARTLY = "partly";

    ...

private function calculateResultOfSearch(array $imagesResultArray)
  {
   if (array_unique($imagesResultArray) === self::RESULT_OF_SEARCH_POSITIVE) {
       return self::RESULT_OF_SEARCH_POSITIVE;
   } elseif(array_unique($imagesResultArray) === self::RESULT_OF_SEARCH_NEGATIVE) 
     {
       return self::RESULT_OF_SEARCH_NEGATIVE;
   } else {
       return self::RESULT_OF_SEARCH_PARTLY;
    }
}

5 个答案:

答案 0 :(得分:3)

我们知道"positive"函数总是返回数组的计数。因此,在条件的每个匹配项中,都将转到其他情况。

您应该尝试这样的事情:

"negative"

$newArray = array_unique($imagesResultArray); if (count($newArray) == 1 && $newArray[0] === self::RESULT_OF_SEARCH_POSITIVE) { return self::RESULT_OF_SEARCH_POSITIVE; } elseif(count($newArray) == 1 && $newArray[0] === self::RESULT_OF_SEARCH_NEGATIVE) { return self::RESULT_OF_SEARCH_NEGATIVE; } else { return self::RESULT_OF_SEARCH_PARTLY; } 返回一个以该数组的值作为键并将其在数组中的频率作为值的数组。

这是使用count()函数检查包含相同值的数组的值并计算所有键是否相同的简单方法。

Reference

答案 1 :(得分:2)

代码的简化版本,如果array_unique仅具有1个值,则将其返回(我也只调用一次,而不是重复调用,效率非常低)...

private function calculateResultOfSearch(array $imagesResultArray)
{
    $unique = array_unique($imagesResultArray);
    return (count($unique) == 1 ) ? $unique[0]
          : self::RESULT_OF_SEARCH_PARTLY;
}

编辑: 意识到我已经浪费了我写的20%的行后,我很遗憾地返回了:(如果所有项目都是相同的,我可以只返回传入的数组的第一项,所以我不需要存储的结果完全array_unique():-/

private function calculateResultOfSearch(array $imagesResultArray)
{
    return ( count(array_unique($imagesResultArray)) == 1 ) ? 
            $imagesResultArray[0]: RESULT_OF_SEARCH_PARTLY;
}

答案 2 :(得分:0)

您正在比较返回(count(array_unique($imagesResultArray))的{​​{1}}与返回int的{​​{1}}或self::RESULT_OF_SEARCH_POSITIVE等于self::RESULT_OF_SEARCH_NEGATIVE或{ {1}},因此始终为假。

您需要更改条件。

对OP进行修改后进行编辑

PHP:array_unique

  

获取输入数组并返回没有重复值的新数组。

在您的情况下,您可能要检查结果数组是否只有一个元素等于string"positive"

"negative"

答案 3 :(得分:0)

尝试此代码:

const RESULT_OF_SEARCH_POSITIVE = "positive";
const RESULT_OF_SEARCH_NEGATIVE = "negative";
const RESULT_OF_SEARCH_PARTLY = "partly";

...

private function calculateResultOfSearch(array $imagesResultArray)
{
    if (!in_array(RESULT_OF_SEARCH_NEGATIVE)) {
        return self::RESULT_OF_SEARCH_POSITIVE;
    } elseif(!in_array(RESULT_OF_SEARCH_POSITIVE)) {
        return self::RESULT_OF_SEARCH_NEGATIVE;
    } else {
        return self::RESULT_OF_SEARCH_PARTLY;
    }
}

答案 4 :(得分:0)

有了你们的回答,我来到了这个“干净”的解决方案。

private function calculateResultOfSearch(array $imagesResultArray)
{
    $results = array_unique($imagesResultArray);

    if(count($results) == 1 && $results[0] === self::RESULT_OF_SEARCH_NEGATIVE) {
        return self::RESULT_OF_SEARCH_NEGATIVE;
    }

    if(count($results) == 1 && $results[0] === self::RESULT_OF_SEARCH_POSITIVE) {
        return self::RESULT_OF_SEARCH_POSITIVE;
    }

    return self::RESULT_OF_SEARCH_PARTLY;
}