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

时间:2015-03-20 13:41:07

标签: php

我试图通过多维数组创建函数并获取键=>只有当它们相同时才对值 所有数组。

我的意思?

如果您查看我的示例,您会看到"Glavna Instanca"的键在所有数组中具有相同的值,它是VR1。 此外,同样的故事适用于"Druga Instanca",其值为"F2"

对于键"Treca Instanca""Cetvrta Instanca",我们有不同的值,并且值必须位于键"differentValues"下。

<?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
                        )
                );
        );
    );

?>

新数组必须是这样的:

$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
                );
            );
    }

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

提前致谢

1 个答案:

答案 0 :(得分:0)

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

$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);

希望有所帮助。