Heim >Backend-Entwicklung >PHP-Tutorial >php-框架 - PHP数组遍历 sku属性值配对

php-框架 - PHP数组遍历 sku属性值配对

WBOY
WBOYOriginal
2016-06-06 20:36:101219Durchsuche

<code>    $skuattr = Array
    (
        '7' => Array
            (
                '6' => '22x33',
                '9' => '44x55',
            ),

        '8' => Array
            (
                '12' => '大小号'
            ),

        '9' => Array
            (
                '8' => '金属质',
                '13' => '塑料',
            ),

        '16' => Array
            (
                '14' => '圆形'
            )

    );
</code>

得到4个值
7:6;8:12;9:8;16:14;
7:9;8:12;9:8;16:14
7:6;8:12;9:13;16:14
7:9;8:12;9:13;16:14
因为键值是动态的,所以需要一个数组遍历的算法,得到结果,大神求助

回复内容:

<code>    $skuattr = Array
    (
        '7' => Array
            (
                '6' => '22x33',
                '9' => '44x55',
            ),

        '8' => Array
            (
                '12' => '大小号'
            ),

        '9' => Array
            (
                '8' => '金属质',
                '13' => '塑料',
            ),

        '16' => Array
            (
                '14' => '圆形'
            )

    );
</code>

得到4个值
7:6;8:12;9:8;16:14;
7:9;8:12;9:8;16:14
7:6;8:12;9:13;16:14
7:9;8:12;9:13;16:14
因为键值是动态的,所以需要一个数组遍历的算法,得到结果,大神求助

原理就是要求笛卡尔积,写了一个简单的例子

<code>php</code><code>function combineDika($data) {
    $result = array();
    foreach (array_shift($data) as $k=>$item) {
        $result[] = array($k=>$item);
    }


    foreach ($data as $k => $v) {
        $result2 = [];
        foreach ($result as $k1=>$item1) {
            foreach ($v as $k2=>$item2) {
                $temp     = $item1;
                $temp[$k2]   = $item2;
                $result2[] = $temp;
            }
        }
        $result = $result2;
    }
    return $result;
}

$skuattr = Array
(
    '7'  => Array
    (
        '6' => '22x33',
        '9' => '44x55',
    ),

    '8'  => Array
    (
        '12' => '大小号'
    ),

    '9'  => Array
    (
        '8'  => '金属质',
        '13' => '塑料',
    ),

    '16' => Array
    (
        '14' => '圆形'
    )

);

$a = combineDika($skuattr);
print_r($a);
</code>
<code>php</code><code>Array
(
    [0] => Array
        (
            [6] => 22x33
            [12] => 大小号
            [8] => 金属质
            [14] => 圆形
        )

    [1] => Array
        (
            [6] => 22x33
            [12] => 大小号
            [13] => 塑料
            [14] => 圆形
        )

    [2] => Array
        (
            [9] => 44x55
            [12] => 大小号
            [8] => 金属质
            [14] => 圆形
        )

    [3] => Array
        (
            [9] => 44x55
            [12] => 大小号
            [13] => 塑料
            [14] => 圆形
        )

)
</code>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn