2011-06-08 59 views
1

我有以下数组的键和值。我如何重新创建这个数组,使第二列作为关键字和第三列的值。同时删除所有不需要的间距。php重新创建一个数组到新的键和值

Array 
(
    [16] =>  hasKeyframes : true 
    [17] =>  hasMetadata  : true 
    [18] =>  duration  : 30 
    [19] =>  audiosamplerate : 22000 
    [20] =>  audiodatarate : 68 
    [21] =>  datasize  : 1103197 
} 

新数组应该看起来像这样。

Array 
(
    [hasKeyframes] => true 
    [hasMetadata] => true 
    ... 
} 
+0

只是循环并将新的键和值分配给一个新的数组 – Ibu 2011-06-08 08:00:55

+0

你现在如何存储键和值?他们在两个单独的阵列?你能提供实际的PHP代码吗? – MGwynne 2011-06-08 08:03:01

+0

@冷夏威夷它是ffmpeg的输出,如果我没有记错的话 – 2011-06-08 08:06:05

回答

4
$newArray=array(); 
foreach($array as $value) 
{ 
    $pair=explode(":",$value); 
    $newArray[trim($pair[0])] = trim($pair[1]); 
} 

编辑

如果我们有像[19] => 时间:00:00:31.03,那么我们只 得到00 $对[1]

$newArray=array(); 
foreach($array as $value) 
{ 
    $pair=explode(":",$value,2); 
    $newArray[trim($pair[0])] = trim($pair[1]); 
} 
+0

谢谢@shakti,这个工作,但如果我们有类似于[[19] =>持续时间:00:00:31.03'的话,那么我们只能得到00'$ pair [1]' – Pinkie 2011-06-08 08:10:42

+2

@Pinkie使用第三个参数爆炸功能,而不是在爆炸中增加一个空间:'$ pair = explode(“:”,$ value,2);' – 2011-06-08 08:21:59

+0

@Carlos:是的,我在编辑我的答案。 – 2011-06-08 08:25:18

1

我的解决方案采用array_walk(),并且从PHP 5.3开始工作,因为使用了匿名函数。

$array=array(/* ORIGINAL ARRAY */); 
$newarray=array(); 

array_walk($array, function ($v, $k) use (&$newarray) { 
    $pos=strpos($v, ':'); 
    $newkey=substr($v, 0, $pos); 
    $newvalue=substr($v, $pos+1); 
    $newarray[$newkey]=$newvalue; 
}); 
相关问题