PHP-比较数组的每两个值


PHP - Comparing every two values of an array

我有一个包含整数值的多维数组。例如:

Array ( [0] => Array ( [0] => 0 [1] => 1 ) [1] => Array ( [0] => 2 [1] => 1 ) [2] => Array ( [0] => 4 [1] => 3 ) [3] => Array ( [0] => 3 [1] => 1 ) ... and so on.  

我想做的是比较数组中的每两个元素(从数组的第一级)。但是有一个陷阱。让我们取前两个元素(0和1):首先,我想比较它们的第一对键值(示例中的值为0和2),然后应该比较第二对键值(在示例中均为1)。

输出应该是(对于第一对):
第一个元素-[0,1]
第二个元素-[2,1]
在第一次比较中,脚本应该返回false(0不等于2),但在第二次比较中应该返回true(1=1)。

我真的不知道该怎么做。我试着让它成为三维的(用array_chunk),但它不起作用,我想我只是用这种方式让我的生活变得更艰难。

不管怎样,我都会发布三维版本的代码。

$tmpBig = array_chunk($indexArr,2);
for ($i=0; $i < count($tmpBig); $i++) { 
    print_r($tmpBig[$i]);
}
foreach ($tmpBig as $key => $value) {
    foreach ($value as $key2 => $value2) {
        foreach ($value2 as $key3 => $value3) {
            //echo $tmpBig[$key][$key2][$key3];
            //echo "<br>";
            if ($tmpBig[0][0] === $tmpBig[1][0]) {
                echo "yes";
            }else echo "no";
        }
    }
}

我们欢迎并感谢您的每一个建议!

此脚本将为所有元素返回与前代元素位于相同索引处的"重复"内容。

它依赖于array_intersect_assoc来检查两个数组在相同的索引处是否有任何共同的内容。因此,结果将是一个非空数组。这些结果是收集的,应该是您需要的。

以下是您可以使用的功能:

function findDuplicates($data) {
    $prev = [null];
    foreach($data as $i => $vector) {
        $same = array_intersect_assoc($vector, $prev);
        if (count($same)) $duplicates[$i] = $same;
        $prev = $vector;
    }
    return $duplicates;
}

对于一些样本数据,您可以这样称呼它:

// Sample data
$data = [[0, 1], [2, 1], [4, 3], [3, 1], [3, 1], [4, 3]]; 
$duplicates = findDuplicates($data);

如果你print_r结果,你会得到这个样本数据:

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

此代码也适用于元素多于2的子数组。

使用简单的foreach循环和sprintf函数尝试以下方法:

$arr = [[0, 1], [2, 1], [4, 3], [3, 1], [4, 1], [4, 5]];
foreach ($arr as $k => $item) {
    if ($k % 2 != 0) {  // perform comparison at each second item
        $prev_key = $k - 1;
        $prev = $arr[$prev_key];  // previous item
        $msg = "items at positions: %d and %d have the same value for the %d%s element. Value: %d". PHP_EOL;
        if ($item[0] == $prev[0]) echo sprintf($msg, $prev_key, $k, 1, 'st', $item[0]);
        if ($item[1] == $prev[1]) echo sprintf($msg, $prev_key, $k, 2, 'nd', $item[1]);
    }
}

输出:

items at positions: 0 and 1 have the same value for the 2nd element. Value: 1
items at positions: 4 and 5 have the same value for the 1st element. Value: 4

数组Array ( [0] => Array ( [0] => 0 [1] => 1 ) [1] => Array ( [0] => 2 [1] => 1 ) [2] => Array ( [0] => 4 [1] => 3 ) [3] => Array ( [0] => 3 [1] => 1 )给定为$array

for($i = 1; $i < count($array); $i++) {
    for($j = 0; $j < count($array[$i]); $j++) {
        if($array[$i][$j] == $array[$i - 1][$j]) {
            echo "(" . $i . ", " . $j . ") and (" . $i - 1 . ", " . $j . ") are the same<br>";
        }
    }
}

这也适用于大于2 的子阵列

它的作用:给定二维阵列:它检查以下两行在(x, y), (x - 1, y)中是否具有相同的编号它对的每一行都这样做

如果你想为每一个可能的行组合做这件事:

for($i = 0; $i < count($array) - 1; $i++) {
    for($j = $i + 1; $j < count($array); $j++) {
        if($i != $k { //Lets not compare a row with itself
            for($k = 0; $k < count($array[$i]); $k++) {
                if($array[$i][$k] == $array[$j][$k]) {
                    echo "(" . $i . ", " . $k . ") and (" . $j . ", " . $k . ") are the same<br>";
                }
            }
        }
    }
}