2016-05-14 4 views
0

Ich habe seit Stunden verwirrt, dies zu tun. so habe ich dieses ArrayGruppierung mehrdimensionalen Array von verschachtelten Tasten

$data = array(
    array(
     'base_id' => 14, 
     'offset' => 1, 
     'name' => 'rental', 
     'value' => 200 
    ), 
    array(
     'base_id' => 14, 
     'offset' => 1, 
     'name' => 'tax', 
     'value' => 20 
    ), 
    array(
     'base_id' => 14, 
     'offset' => 1, 
     'name' => 'misc', 
     'value' => 10 
    ), 
    array(
     'base_id' => 13, 
     'offset' => 5, 
     'name' => 'rental', 
     'value' => 150 
    ), 
    array(
     'base_id' => 13, 
     'offset' => 5, 
     'name' => 'tax', 
     'value' => 15 
    ), 
    array(
     'base_id' => 13, 
     'offset' => 5, 
     'name' => 'misc', 
     'value' => 5 
    ), 
    array(
     'base_id' => 13, 
     'offset' => 7, 
     'name' => 'rental', 
     'value' => 170 
    ) 
); 

und ich möchte, um sie zu gruppieren durch BASE_ID und versetzt so immer wie diese

$result = array(
    array(
     array(
      'base_id' => 14, 
      'offset' => 1, 
      'name' => 'rental', 
      'value' => 200 
     ), 
     array(
      'base_id' => 14, 
      'offset' => 1, 
      'name' => 'tax', 
      'value' => 20 
     ), 
     array(
      'base_id' => 14, 
      'offset' => 1, 
      'name' => 'misc', 
      'value' => 10 
     ), 
    ), 
    array(
     array(
      'base_id' => 13, 
      'offset' => 5, 
      'name' => 'rental', 
      'value' => 150 
     ), 
     array(
      'base_id' => 13, 
      'offset' => 5, 
      'name' => 'tax', 
      'value' => 15 
     ), 
     array(
      'base_id' => 13, 
      'offset' => 5, 
      'name' => 'misc', 
      'value' => 5 
     ), 
    ), 
    array(
     array(
      'base_id' => 13, 
      'offset' => 7, 
      'name' => 'rental', 
      'value' => 170 
     ) 
    ) 
); 

, wie das erreichen? jede Funktion in PHP, um dies zu tun, oder einfach mit loop. Brauche deine Hilfe, danke.

+0

http://php.net/manual/en/function.array-multisort.php Verwendung von PHP 'array_multisort()' –

Antwort

0

Die Lösung ist,

  • Zuerst verwenden eine foreach Schleife Gruppe alle basierend Arrays auf base_id und offset Schlüssel.
  • Wenden Sie anschließend die Callback-Funktion array_merge() auf das resultierende Array an.

So sollte der Code wie folgt sein:

// Suppose $data is your original array 

$result_array = array(); 
foreach($data as $arr){ 
    $result_array[$arr['base_id']][$arr['offset']][] = $arr; 
} 
$result_array = call_user_func_array('array_merge', $result_array); 

// display $result_array 
echo '<pre>'; 
print_r($result_array); 
echo '</pre>'; 

Hier ist die Live Demo

+0

danken Ihnen für die Antwort, arbeitete mit meinem Fall :) –

0

Ihre Daten Iterate und prüfen Sie, ob BASE_ID 13 oder 14.

$_14_result = array(); 
$_13_result = array(); 
foreach($data as $key=> $d){ 
    if($d["base_id"] == 14) 
     $_14_result[] = $d; 
    else 
     $_13_result[] = $d; 

} 

merge 13, 14 Ergebnis BASE_ID in Array

$result[] = $_14_result; 
$result[] = $_13_result; 
print_r($result); 
+0

danke für die Antwort –

0

es keine PHP-Funktion, die diesen Job machen, aber ich ein Skript für dieses porpuse bereitgestellt:

$refrenceArray = array(); 
$outputArray = array(); 
$refrenceIndex = 0; 
foreach($data as $key=>$value) 
{ 
    if(!isset($refrenceArray[$value['base_id']])) 
    { 
      $refrenceArray[$value['base_id']] = $refrenceIndex; 
      $refrenceIndex++; 
    } 
    $outputArray[$refrenceArray[$value['base_id']]][] = $value; 
} 
+0

danke für die Antwort –

+0

@FatimahWulandari Sie sind willkommen –

0

Try this -

<?php 
$data = array(
    array(
     'base_id' => 14, 
     'offset' => 1, 
     'name' => 'rental', 
     'value' => 200 
    ), 
    array(
     'base_id' => 14, 
     'offset' => 1, 
     'name' => 'tax', 
     'value' => 20 
    ), 
    array(
     'base_id' => 14, 
     'offset' => 1, 
     'name' => 'misc', 
     'value' => 10 
    ), 
    array(
     'base_id' => 13, 
     'offset' => 5, 
     'name' => 'rental', 
     'value' => 150 
    ), 
    array(
     'base_id' => 13, 
     'offset' => 5, 
     'name' => 'tax', 
     'value' => 15 
    ), 
    array(
     'base_id' => 13, 
     'offset' => 5, 
     'name' => 'misc', 
     'value' => 5 
    ), 
    array(
     'base_id' => 13, 
     'offset' => 7, 
     'name' => 'rental', 
     'value' => 170 
    ) 
); 

foreach($data as $key=>$val){ 
    $myArr[$val['base_id']][$val['offset']][] = $val; 
} 

echo '<pre>'; print_r($myArr); 
?> 
0

versuchen, diese

<?php 

$data = array(
array(
    'base_id' => 14, 
    'offset' => 1, 
    'name' => 'rental', 
    'value' => 200 
), 
array(
    'base_id' => 14, 
    'offset' => 1, 
    'name' => 'tax', 
    'value' => 20 
), 
array(
    'base_id' => 14, 
    'offset' => 1, 
    'name' => 'misc', 
    'value' => 10 
), 
array(
    'base_id' => 13, 
    'offset' => 5, 
    'name' => 'rental', 
    'value' => 150 
), 
array(
    'base_id' => 13, 
    'offset' => 5, 
    'name' => 'tax', 
    'value' => 15 
), 
array(
    'base_id' => 13, 
    'offset' => 5, 
    'name' => 'misc', 
    'value' => 5 
    ), 
    array(
    'base_id' => 13, 
    'offset' => 7, 
    'name' => 'rental', 
    'value' => 170 
    ) 
    ); 



    foreach($data as $key=>$val){ 
$myArr[$val['base_id'].'_'.$val['offset']][] = $val; 
} 

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

?> 
+0

danke für die Antwort –

Verwandte Themen