如果值相同,则从另一个数组创建数组

时间:2017-02-12 09:59:30

标签: php arrays

我有以下数组 -

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
)

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

运行此代码段时,您将收到此错误

  

注意:未定义的索引:第14行/ in / bcqEH中的2

请参阅https://3v4l.org/bcqEH

这是因为代码尝试比较第一个和第二个,它试图比较第二个和第三个元素。但这第三个要素并不存在。这意味着比较失败并将值设置为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;