首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多维关联数组中分隔不同和相同的值

在多维关联数组中分隔不同和相同的值
EN

Stack Overflow用户
提问于 2015-03-20 21:41:07
回答 1查看 33关注 0票数 0

我正在尝试制作一个函数,它将遍历多维数组,并且仅当它们在所有数组中都相同时才能获得键=>对的值。

我的意思是?

如果你看一下我的例子,你会发现在所有的数组中,带有"Glavna Instanca"的键是如何具有相同的值的,而且它是VR1。同样,值为"F2""Druga Instanca"也是如此。

对于键"Treca Instanca""Cetvrta Instanca",我们有不同的值,这些值需要在键"differentValues"下。

代码语言:javascript
复制
<?php
Array
(
    [0] = Array
        (
            [itemi] = Array
                (
                    [0] = Array
                        (
                            [Glavna Instanca] = VR1
                            [Druga Instanca] = F2
                            [Treca Instanca] = VR3
                            [Cetvrta Instanca] = D4
                        )

                    [1] = Array
                        (
                            [Glavna Instanca] = VR1
                            [Druga Instanca] = F2
                            [Treca Instanca] = VR3
                            [Cetvrta Instanca] = D4
                        )

                    [2] = Array
                        (
                            [Glavna Instanca] = VR1
                            [Druga Instanca] = F2
                            [Treca Instanca] = VR333
                            [Cetvrta Instanca] = D444
                        )

                    [3] = Array
                        (
                            [Glavna Instanca] = VR1
                            [Druga Instanca] = F2
                            [Treca Instanca] = VR333
                            [Cetvrta Instanca] = D4
                        )
                );
        );
    );

?>

新的数组需要如下所示:

代码语言:javascript
复制
$newArray = array(
         [Glavna Instanca] = VR1
         [Druga Instanca] = F2
         [differentValues] =>
            array(
                '0' => 
                array(
                    [Treca Instanca] = VR3
                    [Cetvrta Instanca] = D4
                );
                '1' =>
                array(
                    [Treca Instanca] = VR3
                    [Cetvrta Instanca] = D4
                );
                '2' => 
                array(
                    [Treca Instanca] = VR333
                    [Cetvrta Instanca] = D444
                );
                '3' => 
                array(
                    [Treca Instanca] = VR333
                    [Cetvrta Instanca] = D4
                );
            );
    }

任何形式的帮助都将不胜感激!

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2015-03-21 00:06:22

这里有一个快速而肮脏的解决方案:

代码语言:javascript
复制
$array = array(
    array(
        'itemi' => array(
            array(
                'foo' => 'bar',
                'baz' => 'quz',
                'ASD' => '1',
                'DSA' => '11'
            ),
            array(
                'foo' => 'bar',
                'baz' => 'quz',
                'ASD' => '2',
                'DSA' => '22'
            ),
            array(
                'foo' => 'bar',
                'baz' => 'quz',
                'ASD' => '3',
                'DSA' => '33'
            ),
            array(
                'foo' => 'bar',
                'baz' => 'quz',
                'ASD' => '4',
                'DSA' => '44'
            ),
            array(
                'foo' => 'bar',
                'baz' => 'quz',
                'ASD' => '5',
                'DSA' => '55'
            )
        )
    )
);

$cleanArray = array();
foreach ($array[0] as $mainKey => $mainValue) {
    $a = true;
    $b = true;
    $c = true;
    $d = true;
    for ($i = 0; $i < count($mainValue); $i++) {
        if (isset($mainValue[$i+1])) {
            $a = ($a === true && ($mainValue[$i]['foo'] === $mainValue[$i+1]['foo'])) ?  true : false;
            $b = ($b === true && ($mainValue[$i]['baz'] === $mainValue[$i+1]['baz'])) ?  true : false;
            $c = ($c === true && ($mainValue[$i]['ASD'] === $mainValue[$i+1]['ASD'])) ?  true : false;
            $d = ($d === true && ($mainValue[$i]['DSA'] === $mainValue[$i+1]['DSA'])) ?  true : false;
        }
    }
    ($a === true) ? $cleanArray['foo'] = $mainValue[0]['foo'] : null;
    ($b === true) ? $cleanArray['baz'] = $mainValue[0]['baz'] : null;
    ($c === true) ? $cleanArray['ASD'] = $mainValue[0]['ASD'] : null;
    ($d === true) ? $cleanArray['DSA'] = $mainValue[0]['DSA'] : null;
    for ($i = 0; $i < count($mainValue); $i++) {
        if ($a) {unset($mainValue[$i]['foo']);}
        if ($b) {unset($mainValue[$i]['baz']);}
        if ($c) {unset($mainValue[$i]['ASD']);}
        if ($d) {unset($mainValue[$i]['DSA']);}
    }
    $cleanArray['differentValues'] = $mainValue;
}
var_dump($cleanArray);

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29167939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档