我有一个包含2个可能值negative
和positive
的数组。如果所有值均为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;
}
}
答案 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()
函数检查包含相同值的数组的值并计算所有键是否相同的简单方法。
答案 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;
}