multidim diziye dizi dönüşümü php

2 Cevap php

Yani ORM olarak Doctrine ile bir web sitesi üzerinde çalışıyorum ve ben geri bir sonucu olarak şu dizi olsun:

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

Böyle bir şey için (PHP) Bu dizi dönüştürmek mümkün mü:

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

Yardımlarınız için teşekkürler, yeni şeyler yapmanın yollarını ve ben StackOverflow bu yüzden seviyorum öğrenmeye her zaman istekli ;)

2 Cevap

Test ve çalışma:

Code:

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

Sonuç:

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"
      }
    }
  }
}

Eğer sayfaların bir dizi almak ve her sayfaların bir dizi içeren kategorilerden bir dizi çevirmek istiyor gibi görünüyor.

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