转换多维数组PHP

时间:2014-11-15 12:45:13

标签: php multidimensional-array

我想在Php中转换多维数组

我陷入逻辑中..请帮助

提前致谢

当前制作的数组:

        Array
        (
         [5316] => Array
                (
                  [0] => Array
                  (
                       [PROD1] => color=black
                  )

                  [1] => Array
                  (
                   [PROD1] => paper=a1
                  )

                  [2] => Array
                  (
                   [PROD2] => color=metallic_silver
                  )

                  [3] => Array
                  (
                   [PROD2] => paper=a1
                  )
                )
        )

我想将此数组转换为此格式

Array
        (
         [5316] => Array
         (
          [PROD1] => Array
          (
           color => black
           paper => a1
          )
          [PROD2] => Array
          (
           color => metallic_silver
           paper => a1
          )
         )
        )

2 个答案:

答案 0 :(得分:0)

您可以尝试以下内容。

$newArr = [];
$count = count($arr[5316]);

for($i = 0, $j = 1; $i < $count; $i += 2){
    $color = explode('=', $arr[5316][$i]['PROD'.$j]);
    $paper = explode('=', $arr[5316][$i+1]['PROD'.$j]);
    $newArr[5316]['PROD'.$j] = array('color'=>$color[1], 'paper'=>$paper[1]);
    $j++;
}

//To show output
print '<pre>';
print_r($newArr);
print '</pre>';

答案 1 :(得分:0)

如果您无法对该键进行硬编码以直接指向该键,则可以在这种情况下使用reset(),然后相应地将它们分组到foreach中。例如:

$array = array(
    5316 => array(
        array('PROD1' => 'color=black'),
        array('PROD1' => 'paper=a1'),
        array('PROD2' => 'color=metallic_silver'),
        array('PROD2' => 'paper=a1'),
    ),
);

$grouped = array();
// point it to the first key which gives an array of those values
foreach (reset($array) as $key => $value) {
    reset($value); // reset the internal pointer of the sub array
    $key = key($value); // this return `PROD1, PROD2`
    $grouped[$key][] = current($value); // current gives color=black, the values
}

$array[key($array)] = $grouped; // then reassign

echo '<pre>';
print_r($array);

Sample Output