鍍金池/ 問答/PHP  網(wǎng)絡(luò)安全/ php求助如何將二維數(shù)組變成一維數(shù)組?

php求助如何將二維數(shù)組變成一維數(shù)組?

現(xiàn)在有一個二維數(shù)組格式如下:

Array
(
    [0] => Array
        (
            [id] => 38
            [goods_id] => 77426
            [model_name] => 顏色
            [model_sub_name] => Array
                (
                    [0] => 黑色
                    [1] => 白色
                    [2] => 紅色
                    [3] => 淺藍色
                    [4] => 紫色
                )

            [goods_stock] => Array
                (
                    [0] => 321
                )

            [curr_price] => Array
                (
                    [0] => 99
                )

            [goods_weight] => Array
                (
                    [0] => 280
                )

        )

    [1] => Array
        (
            [id] => 39
            [goods_id] => 77426
            [model_name] => 尺碼
            [model_sub_name] => Array
                (
                    [0] => 32A
                    [1] => 34A
                    [2] => 36A
                    [3] => 32B
                    [4] => 34B
                    [5] => 36B
                    [6] => 38B
                    [7] => 34C
                    [8] => 36C
                    [9] => 38C
                    [10] => 40C
                    [11] => 
                )

            [goods_stock] => Array
                (
                    [0] => 321
                )

            [curr_price] => Array
                (
                    [0] => 99
                )

            [goods_weight] => Array
                (
                    [0] => 280
                )

        )

)

現(xiàn)在需要將這個二維數(shù)組變成如下格式:

Array
(
    [0] => Array
        (
            [model_name] => 顏色
            [model_sub_name] => 黑色
            [goods_stock] => 321
            [curr_price] => 99
            [goods_weight] => 280

        )
    [1] => Array
        (
            [model_name] => 顏色
            [model_sub_name] => 白色
            [goods_stock] => 321
            [curr_price] => 99
            [goods_weight] => 280

        )
        ……這里省略N個數(shù)組

    [N+1] => Array
        (
            [model_name] => 尺碼
            [model_sub_name] => 32A
            [goods_stock] => 321
            [curr_price] => 99
            [goods_weight] => 280
               
        )
    [N+2] => Array
        (
            [model_name] => 尺碼
            [model_sub_name] => 34A
            [goods_stock] => 321
            [curr_price] => 99
            [goods_weight] => 280
               
        )
    這里也省略總數(shù)組第二個元素的幾條記錄
)

在上述數(shù)組中g(shù)oods_stock、curr_price、goods_weight都是數(shù)組,如果這幾個鍵中的數(shù)組只有一個元素,那么在model_name一樣的前提下,goods_stock、curr_price、goods_weight都取這一個值,否則,就取model_sub_name中元素下標對應的goods_stock、curr_price、goods_weight中的值。比如model_sub_name為“白色”時對應的下標是1,上述數(shù)組中g(shù)oods_stock、curr_price、goods_weight都只有一個元素,那么就取這一個元素的值,如果不是一個元素,則取goods_stock[1]、curr_price[1]、goods_weight[1]的值,不知道這樣的描述是否理解。求助大神幫忙解決一下。

回答
編輯回答
凹凸曼

需要先設(shè)置一個空數(shù)組,然后兩層循環(huán),第一層循環(huán)大數(shù)組,第二層循環(huán)里面的model_sub_name,然后給空數(shù)組賦值就行了

2018年1月5日 22:19
編輯回答
下墜

首先要指責一下,print_r的輸出貼出來,怎么還原為數(shù)組代碼,demo都寫不了,要死啦。

$arr = ['a', 'b', 'hello' => '原罪'];

var_export($arr);

// 返回值:可以直接還原為代碼
array (
  0 => 'a',
  1 => 'b',
  'hello' => '原罪',
);

這個用reduce比較合適

$result = array_reduce($arr, function ($carry, $item) {
    $extraProperties = ['goods_stock', 'curr_price', 'goods_weight'];

    // 先計算下標數(shù)量,提高效率
    $lengths = [];
    foreach ($extraProperties as $property) {
        $lengths[$property] = count($item[$property]) - 1;
    }

    // 開始收集
    foreach ($item['model_sub_name'] as $index => $subName) {
        $sub = [
            'model_name' => $item['model_name'],
            'model_sub_name' => $subName,
        ];
        
        foreach ($extraProperties as $property) {
            $propertyIndex = min($index, $lengths[$property]);
            $sub[$property] = $item[$property][$propertyIndex];
        }
       
        $carry[] = $sub;
    }

    return $carry;
}, []);

其中$propertyIndex那邊默認使用最后一個元素,應該可以滿足你提的需求。你可以根據(jù)實際需求

2017年2月20日 03:55