2016-05-14 86 views
0

我一直困惑了幾個小時這樣做。所以,我有這樣的陣列通過嵌套鍵分組多維數組

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

,我想他們按BASE_ID和偏移,因此成爲這樣

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

如何實現這一目標?在PHP中的任何功能做到這一點,或只是使用循環。需要你的幫助,謝謝。

+0

http://php.net/manual/en/function.array-multisort.php使用PHP'在array_multisort()' –

回答

0

解決方案是,

  • 首先使用一個foreach循環來根據base_idoffset鍵將所有數組分組。
  • 然後將回調函數array_merge()應用於結果數組。

所以,你的代碼應該是這樣的:

// 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>'; 

這裏的Live Demo

+0

謝謝你答案,與我的情況:) –

0

迭代數據並請檢查是否BASE_ID是13或14

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

} 

合併BASE_ID 13,14結果存入數組

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

謝謝你的答案 –

0

沒有PHP函數做這個工作,但我提供了這個porpuse腳本:

$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

謝謝你的答案 –

+0

@FatimahWulandari歡迎您 –

0

試試這個 -

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

試試這個

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

謝謝你的答案 –