我有五个2-D阵列,(你可以假设它像五个电子表格一样),我想采取五个交叉点(我希望新电子表格中所有五个的常见行),但现在我发现了其中一个数组是一个NULL数组,(我发现它不是电子表格,而只是一张白纸),所以现在我想忽略它并交叉其余的数组......请建议一种做法该...
P.S。 - 我知道它违背了交集的属性,因为我们都知道任何带NULL的交点都是NULL,但这不是我想要的......
P.S。 - 我也不知道有多少数组可以为空,我只是假设它是1作为一个例子,它可以是2,3,4或偶数5 ...是的,如果它是5,那么返回NULL是完美但不是在任何其他情况下...假设如果4个数组是NULL,那么它应该返回第5个数组...
使用的语言:PHP
答案 0 :(得分:1)
您可以使用array_filter()和in_array()的自定义实现来检查您的数组是否为空
解决方案:
$array1 = array(6, 10, 11, 12);
$array2 = array(6, 741, 18, 9, 110, 11, 12);
$array3 = array(8, 10, 11, 20);
$array4 = null;
$array5 = array(9, 10, 11, 12);
function in_array_custom($item, $array)
{
if($array === null){
return true;
}
return in_array($item, $array);
}
function intersect($item)
{
global $array2;
global $array3;
global $array4;
global $array5;
return in_array_custom($item, $array2) && in_array_custom($item, $array3) && in_array_custom($item, $array4) && in_array_custom($item, $array5);
}
print_r(array_filter($array1, "intersect"));
我分享全球解决方案:
<?php
$arrays = array(
array(6, 10, 11, 12),
array(6, 741, 18, 9, 110, 11, 12),
array(8, 10, 11, 20),
null,
array(9, 10, 11, 12)
);
function in_array_custom($item, $array)
{
if($array === null){
return true;
}
return in_array($item, $array);
}
function in_arrays($item, $arrays)
{
foreach($arrays as $array)
{
if(!in_array_custom($item, $array)) {
return false;
}
}
return true;
}
function intersect($item)
{
global $arrays;
return in_arrays($item, $arrays);
}
print_r(array_filter($arrays[0], "intersect"));
这里有一个小问题,如果第一个数组($array1
)为空,那么代码将不起作用,但可以通过将$array1
作为联盟来解决该问题所有的SIX数组,(5个数组和1个联合数组),数据转移到下一个数组,即$array2
现在保存$array1
,$array3 = $array2
的数据,依此类推。 ..
P.S。 - 数组联合可以像$array1 = $array2 + $array3 + $array4 + $array5 + $array6;