php将数组转换为multidim数组

时间:2010-04-20 19:59:18

标签: php arrays multidimensional-array

所以我正在使用Doctrine作为ORM的网站,我得到了以下数组:

Array (
    [0] => Array (
        [c_cat_id] => 1
        [c_title] => Programas e projetos
        [p_menu] => PBA BR 163
        [p_page_id] => 1
    )
    [1] => Array (
        [c_cat_id] => 1
        [c_title] => Programas e projetos
        [p_menu] => Outros projetos
        [p_page_id] => 3
    )
) 

是否可以将此数组(在PHP中)转换为以下内容:

Array (
    [0] => Array (
        [c_cat_id] => 1
        [c_title] => Programas e projetos
        [pages] => Array (
            [0] => Array (
                [p_page_id] => 1
                [p_menu] => PBA BR 163
            )
            [1] => Array (
                [p_page_id] => 3
                [p_menu] => Outros projetos
            )
        )
    )
)

感谢您的帮助,始终渴望学习新的做事方式,这就是我喜欢StackOverflow的原因;)

2 个答案:

答案 0 :(得分:1)

经过测试和工作:

代码:     

$original = array(
  array(
    "c_cat_id" => "1",
    "c_title" => "Programas e projetos",
    "p_menu" => "PBA BR 163",
    "p_page_id" => "1"),
  array(
    "c_cat_id" => "1",
    "c_title" => "Programas e projetos",
    "p_menu" => "Outros projetos",
    "p_page_id" => "3"),
  array(
    "c_cat_id" => "2",
    "c_title" => "Another Cat",
    "p_menu" => "Outros projetos",
    "p_page_id" => "4"),
);
$result = array();

foreach ($original as $row) {
  $cat = $row['c_cat_id'];
  if (!isset($result[$cat])) {
    $result[$row['c_cat_id']] = array(
      'c_cat_id'=>$row['c_cat_id'],
      'c_title'=>$row['c_title'],
      'pages'=>array(),
    );
  }
  unset($row['c_cat_id'],$row['c_title']);
  $result[$cat]['pages'][] = $row;
}

var_dump($result);

结果:

array(2) {
  [1]=>
  array(3) {
    ["c_cat_id"]=>
    string(1) "1"
    ["c_title"]=>
    string(20) "Programas e projetos"
    ["pages"]=>
    array(2) {
      [0]=>
      array(2) {
        ["p_menu"]=>
        string(10) "PBA BR 163"
        ["p_page_id"]=>
        string(1) "1"
      }
      [1]=>
      array(2) {
        ["p_menu"]=>
        string(15) "Outros projetos"
        ["p_page_id"]=>
        string(1) "3"
      }
    }
  }
  [2]=>
  array(3) {
    ["c_cat_id"]=>
    string(1) "2"
    ["c_title"]=>
    string(11) "Another Cat"
    ["pages"]=>
    array(1) {
      [0]=>
      array(2) {
        ["p_menu"]=>
        string(15) "Outros projetos"
        ["p_page_id"]=>
        string(1) "4"
      }
    }
  }
}

答案 1 :(得分:0)

看起来您想要获取一个页面数组并将其转换为一个类别数组,每个类别包含一个页面数组。

$inputArray = array(...); // whatever you have originally
$catArray = array();
foreach($inputArray as $page) {
  addToCatArray($page);
}

function addToCatArray($page) {
  $found = false;
  foreach($catArray as $cat) {
    if ($cat['c_cat_id'] == $page['c_cat_id'] {
      $newPage = array('p_page_id' => $page['p_page_id'], 'p_menu' => $page['p_menu']);
      $cat['pages'][] = $newPage;
      $found = true;
      break;
    }
  }
  if (!$found) { // create a new category
    $newCat = array('c_cat_id' => $page['c_cat_id'], 'c_title' => $page['c_title']);
    $newPage = array('p_page_id' => $page['p_page_id'], 'p_menu' => $page['p_menu']);
    $newCat['pages'] = array($newPage);
    $catArray[] = $newCat;
  }
}