我在使用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。
答案 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