我有以下数组 -
Array
(
[31] => Array
(
[0] => 3
[1] => 3
)
[33] => Array
(
[0] => 2
[1] => 1
)
)
现在对于键31,两个元素具有相同的值,即3但不是键33.所以我试图创建另一个看起来像的数组。
Array
(
[31] => same
[33] => notsame
)
这意味着如果来自多维数组的键具有相同的所有值,那么它将具有相同的文本'else'else'notsame'
我的代码 -
foreach($subvaluesArr as $k1=>$v1) //$subvaluesArr is the multidimensional array here
{
foreach($v1 as $k2=>$v2)
{
if($v1[$k2] = $v1[$k2+1])
{
$newArr[$k1] = 'same';
}
else
{
$newArr[$k1] = 'notsame';
}
}
}
echo '<pre>';
print_r($newArr);
echo '</pre>';
两个键的输出显示'notsame'。
Array
(
[31] => notsame
[33] => notsame
)
非常感谢任何帮助。
答案 0 :(得分:1)
运行此代码段时,您将收到此错误
注意:未定义的索引:第14行/ in / bcqEH中的2
这是因为代码尝试比较第一个和第二个,和它试图比较第二个和第三个元素。但这第三个要素并不存在。这意味着比较失败并将值设置为notsame
。
要解决此问题,您可以只比较前两个元素,例如
foreach ($subvaluesArr as $k1 => $v1) {
if ($v1[0] == $v1[1]) {
$newArr[$k1] = 'same';
} else {
$newArr[$k1] = 'notsame';
}
}
如果您确实有两个以上的元素,可以尝试array_unique
foreach ($subvaluesArr as $k1 => $v1) {
$u = array_unique($v1);
if (count($u) == 1) {
$newArr[$k1] = 'same';
} else {
$newArr[$k1] = 'notsame';
}
}
答案 1 :(得分:0)
运行break;
条件后,您必须if-else
循环。
例如:
foreach($subvaluesArr as $k1=>$v1) //$subvaluesArr is the multidimensional array here
{
foreach($v1 as $k2=>$v2)
{
if($v1[$k2] === $v1[$k2+1])
{
$newArr[$k1] = 'same';
}
else
{
$newArr[$k1] = 'notsame';
}
break;
}
}
答案 2 :(得分:0)
无法评论所以我把它写成答案。在你的循环中,当你点击数组的最后一个元素时,你会问
if($v1[$k2] == $v1[$k2+1])
其中$v1[$k2+1]
是&#34;未定义&#34;因为你是出界的。所以这最后一个元素总是假的,你最终会得到&#34; notsame&#34;