Bir tuş üzerinde iki dizi birleştirmek?

3 Cevap php

Ben aynı değerlere, örneğin üzerinden başka bir dizi ile bir dizi öğeleri ilişkilendirmek istedim. items.group_id -> groups.group_id, düzgünce yapmak için bir dizi işlevi var? =)

Ben iki dizi var:

$items = array(
              [0] => array(
                          'group_id' => 456,
                          'item_id' => 123,
                          // Rest of details
                     );
              [1] => array(
                          'group_id' => 457,
                          'item_id' => 124,
                          // Rest of details
                     );
              [2] => array(
                          'group_id' => 457,
                          'item_id' => 125,
                          // Rest of details
                     );
              [3] => array(
                          'group_id' => 456,
                          'item_id' => 126,
                          // Rest of details
                     );
          );

$groups = array(
                [0] => array(
                          'group_id' => 456,
                          'group_name' => 'General'
                     );
                [1] => array(
                          'group_id' => 457,
                          'group_name' => 'Ungeneral'
                     );
          );

Ve ben istiyorum sonucudur:

$groups = array(
                [0] => array(
                          'group_id' => 456,
                          'group_name' => 'General'
                          [0] => array(
                                     'item_id' => 123,
                                     // Rest of details
                                 );
                          [1] => array(
                                     'item_id' => 126,
                                     // Rest of details
                                 );
                     );
                [1] => array(
                          'group_id' => 457,
                          'group_name' => 'Ungeneral'
                          [0] => array(
                                     'item_id' => 124,
                                     // Rest of details
                                 );
                          [1] => array(
                                     'item_id' => 125,
                                     // Rest of details
                                 );
                     );
          );

Muhtemelen çok karmaşık değil, ama ben zaten PHP uygulanan düzgün bir çözüm olacağını umuyordum! Herhangi bir yardım için çok teşekkürler.

3 Cevap

Bunu yapmak için yerleşik bir işlevi var sanmıyorum, ama burada ele gereken bazı temel kod:

<?php
    // First, group the items by their group_id
    $items_by_group = array();
    foreach($items as $item) {
        $items_by_group[$item['group_id']][] = $item;
    }

    // Second, go through the groups and if they have any associated items,
    // add them to that group's array.
    foreach($groups as $key => $value) {
        if(isset($items_by_group[$value['group_id']])) {
            foreach($items_by_group[$value['group_id']] as $ikey => $ivalue) {
                unset($ivalue['group_id']);
                $groups[$key][$ikey] = $ivalue;
            }
        }
    }
?>

Yukarıdaki kod güvenle geçersiz bir grup kimliği ile ürün yok davalarına unutmayın (tanımlı değil, bir grup için bir - bu öğeleri göz ardı edeceğiz).

Yerine sayısal indeksler id tarafından gruplar dizi anahtarlı olsa daha kolay olurdu

$newArray = array();
foreach($groups as $group) {
  // add the group, and an items array we can append to later.
  $newArray[$group['group_id']] = $group;
  $newArray[$group['group_id']]['items'] = array();  
}
foreach ($items as $item) {
  $newArray[$item['group_id']]['items'][] = $item;
}

Bu gibi bir dizi neden:

$newArray = array(
   [456] => array(
     'group_id' => 456,
     'group_name' => 'General'
     'items' => array(
       [0] => array(
         'item_id' => 123,
         // Rest of details
       );
       [1] => array(
         'item_id' => 126,
         // Rest of details
         );
       );
     );

Ben çözüm ahbap bazı yardımıyla, benim için çalışan bir çözüm bulundu.

$links_by_group = array();
	    foreach($links as $link) {
	    	$linked_groups = $this->return_linked_groups($link['link_id']);
			foreach($linked_groups as $group){
				$links_by_group[$group][$link['link_id']] = $link;
			}
	    }

Yardımın için teşekkürler!