PHP数组检查相同值的计数

时间:2016-10-02 15:22:35

标签: php arrays

我在使用array_inersect()比较两个阵列时遇到了麻烦,尝试了很多来自SO的建议,但都没有效果。所以这是我的问题:

我有两个数组:

$base_array = array(2,2,2,1);

Array
(
    [0] => 2
    [1] => 2
    [2] => 2
    [3] => 1
)

另一个$risks打印如下:

Array
(
    [0] => 2
    [1] => 3
    [2] => 4
    [3] => 1
    [4] => 2
    [5] => 8
    [6] => 6
)

我想要的是查看来自$base_array相同数量和类型的值是否适合$risks数组。现在它应该返回false原因我只有两个出现的数字2和基数组有3.但如果我将$base_array设置为:

$base_array = array(2,2,1);

这应该返回true。

2 个答案:

答案 0 :(得分:1)

一种方法可以计算每个数字的出现次数,然后手动比较它们。为此,您需要两个数组来保持发生次数。

$base_array_count = [];
$risks_count = [];

在你的情况下$base_array_count看起来像

$base_array_count[1] = 1
$base_array_count[2] = 2

$risks_array_count看起来像

$risks_count[1] = 1
$risks_count[2] = 2
$risks_count[3] = 1
$risks_count[4] = 1
$risks_count[6] = 1
$risks_count[8] = 1

现在循环浏览$base_array并检查每个数字$base_array_count的值是否与$risks_array_count

相同

编辑后完成代码:

$base_array = array(1,2,2,7);
$risks_array = array(2,3,4,5,6,7);

$base_array_count = array();
$risks_array_count = [];

for($i = 0; $i < sizeof($base_array); $i++){
    if( !isset($base_array_count[$base_array[$i]] ))
        $base_array_count[$base_array[$i]] = 0;
    $base_array_count[$base_array[$i]]++;
}

for($i = 0; $i < sizeof($risks_array); $i++){
    if( !isset($risks_array_count[$risks_array[$i]] ))
        $risks_array_count[$risks_array[$i]] = 0;
    $risks_array_count[$risks_array[$i]]++;
}

$same = true;

if (sizeof($base_array) <= sizeof($risks_array)) {
    for ($i = 0; $i < sizeof($base_array); $i++) {
        if(!isset($risks_array_count[$base_array[$i]]) || $base_array_count[$base_array[$i]] != $risks_array_count[$base_array[$i]]){
            $same = false;
            break;
        }
    }
} else {
    $same = false;
}
if($same)
    echo "TRUE";
else
    echo "FALSE";

答案 1 :(得分:1)

可以通过array_diff进行一些额外的检查。见这里

sqlite_sequence