2011-04-08 55 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; 
}