我有一个包含整数值的多维数组。例如:
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>";
}
}
}
}
}