2011-06-24 48 views
1

我想知道是否有人可以幫助我重組預定義的PHP數組。我目前的陣列的輸出是:幫助需要重組一個PHP數組

Array 
(
    [71-ctns] => 1 
    [71-units] => 1 
    [308-units] => 1 
    [305-ctns] => 1 
    [306-units] => 2 
) 

而且我想它看起來像:

Array 
(
    [71] => Array 
     (
      [ctns] => 1 
      [units] => 1 
     ) 
    [308] => Array 
     (
      [units] => 1 
     ) 

    [305] => Array 
     (
      [ctns] => 1 
     ) 
    [306] => Array 
     (
      [units] => 2 
     ) 
) 

這可能嗎?

回答

2

這應該這樣做

$merged = array(); 
foreach($a as $k=>$v){ 
    $t = explode('-',$k); 
    $id = intval($t[0]); 
    if(!array_key_exists($id, $merged)) 
     $merged[$id] = array(); 
    $merged[$id][$t[1]] = $v; 
} 

編輯:

對不起你應該使用爆炸,而不是分裂。

+0

謝謝非常棒,效果很好! :) – SoulieBaby

1

是的,但你需要循環(注:array_map也能正常工作,但這個例子是更清楚了):

$fin = array(); 
foreach($complex as $item => $val) 
{ 
    $pieces = explode('-', $item); 
    $fin[$pieces[0]] = isset($fin[$pieces[0]])?:array(); 
    $fin[$pieces[0]][$pieces[1]] = $val; 
} 
+0

我想你想要'$ fin [$ pieces [0]] [$ pieces [1]] = $ val;' – GWW

+0

@GWW YOu是對的。複製並粘貼錯誤。 – cwallenpoole

1

找到下面的代碼重新構建一個預定義的PHP數組

<?php 
$newArray=array(); 
$result = array("71-ctns"=>1,"71-units"=>1,"308-ctns"=>1,"308-units"=>1,"305-units"=>1,"306-units"=>2); 
if(is_array($result) && count($result)>0) { 
    foreach($result as $key=>$val) { 
     $getKeyArray = explode("-",$key); 
     $newArray[$getKeyArray[0]][$getKeyArray[1]] =$val;  
    } 
} 
print"<pre>"; 
print_r($newArray); 
?>