2011-04-08 53 views
1

有一個$ x作爲數組:變換數組uplevel數組元素?

$x1 = array(
    0=>array("up1", -10, 1, 1, 2.5), 
    19=>array("up2",-4, 1.2, 2, 0.5) 
); 

我想改造$x1成了x2這樣的:

 $x2 = Array(
    'A'=> 
     array(
     "up1"=>array(-10, 1, 1, 2.5), 
     "up2"=>array(-4, 1.2, 2, 0.5) 
     ) 
    ); 

任何人都可以告訴幫我的算法來做到這一點:?

回答

4
$x2 = array(); 
foreach ($x1 as $x) { 
    $key = array_shift($x); 
    $x2['A'][$key] = $x; 
} 

或者,如果你想成爲真正的聰明:

$x2 = array(); 
foreach ($x1 as $x) { 
    $x2['A'][array_shift($x)] = $x; 
} 
+1

非常酷,不知道array_shift()。總是在這裏學習新的東西! – 2011-04-08 08:08:01

+0

明確,簡單,可以理解 – kn3l 2011-04-08 08:11:42

+0

@Mike PHP中有很多有用的[數組函數](http://php.net/manual/en/ref.array.php)。由於數組幾乎都是在PHP中發展的,所以您應該花時間瀏覽它們。有一天你會找到一個用途。 @IEnAk ......尚未被接受。 :-(只是在開玩笑,我真的不需要這些分數。; o))) – deceze 2011-04-08 08:20:33

1
$x2 = array(); 
$i = 0; 
foreach ($x1 as $data) { 
    if (empty($x2['A'])) { 
     $x2['A'] = array(); 
    } 

    $x2['A'][ array_shift($data) ] = $data; 
} 
+0

up1從array(「up1」...)移動而不是硬編碼。 – kn3l 2011-04-08 07:55:55

+0

謝謝,編輯。 – hsz 2011-04-08 07:58:16

0

請試試這個

for ($i = 0 ; $x1[$i] != NULL ; $i++) { 
    $x1[$i] = 'a'=>($x1[$i]); 
    for ($j = 0 ; $x1[$i][$j] != NULL; $j++) { 
    $x1[$i][$j] = 'up'.$j=> $x1[$i][$j]; 
    } 
} 
+2

如果你打算使用'for'循環,不要使條件'$ x1 [$ i]!= NULL',它會引發通知!此外,你有奇怪的位置'=>的語法錯誤。 – deceze 2011-04-08 08:02:20

0

這是我會怎麼做呢。不是最好的方式,但它工作正常。

$x1 = array(
    0=>array("up1", -10, 1, 1, 2.5), 
    19=>array("up2",-4, 1.2, 2, 0.5) 
); 

$x2 = array('A' => array()); 

foreach($x1 as $current) { 
    $key = $current[0]; 
    unset($current[0]); 
    $x2['A'][$key] = $current; 
}