我有一个包含整数值的多维数组。例如:
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),之后第二对键值应该是comared (在示例中 - 均为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";
}
}
}
每个建议都受到欢迎和赞赏!
答案 0 :(得分:0)
将数组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>";
}
}
}
}
}
答案 1 :(得分:0)
此脚本将为所有元素返回与其前任相同索引的“重复”内容。
它依赖于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的子数组。
答案 2 :(得分:0)
使用简单的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