PHP相交数组但不是NULL数组

时间:2016-07-26 08:45:31

标签: php arrays logic

我有五个2-D阵列,(你可以假设它像五个电子表格一样),我想采取五个交叉点(我希望新电子表格中所有五个的常见行),但现在我发现了其中一个数组是一个NULL数组,(我发现它不是电子表格,而只是一张白纸),所以现在我想忽略它并交叉其余的数组......请建议一种做法该...

P.S。 - 我知道它违背了交集的属性,因为我们都知道任何带NULL的交点都是NULL,但这不是我想要的......

P.S。 - 我也不知道有多少数组可以为空,我只是假设它是1作为一个例子,它可以是2,3,4或偶数5 ...是的,如果它是5,那么返回NULL是完美但不是在任何其他情况下...假设如果4个数组是NULL,那么它应该返回第5个数组...

使用的语言:PHP

1 个答案:

答案 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")); 

Live example

我分享全球解决方案:

<?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"));

Live example

这里有一个小问题,如果第一个数组($array1)为空,那么代码将不起作用,但可以通过将$array1作为联盟来解决该问题所有的SIX数组,(5个数组和1个联合数组),数据转移到下一个数组,即$array2现在保存$array1$array3 = $array2的数据,依此类推。 ..

P.S。 - 数组联合可以像$array1 = $array2 + $array3 + $array4 + $array5 + $array6;

那样完成