2011-04-04 66 views
0

我有一个数组数组assoc命令

Array 
(
    [0] => [RESPONSE] 

    [1] => DESCRIPTION=Attribute value is not unique 

    [2] => CODE=540 

    [3] => 

    [4] => QUEUETIME=0.003 

    [5] => RUNTIME=0.003 

    [6] => 

    [7] => EOF 

) 
Array 

我希望把它做成

array([DESCRIPTION] => Attribute value is not unique, [CODE] => 540 ...); 

我怎样才能做到这一点?我不能使用爆炸,因为它是一个数组?

+0

什么是[RESPONSE]和其他值?你这样描述数组的方式,他们......好吧,这些都不是有效的PHP ^^ – KingCrunch 2011-04-04 21:00:30

+3

这已经看起来非常糟糕了,可能值得备份一两步,解释你正在做什么和你的目标...... – 2011-04-04 21:05:13

+1

这是你试图解析的.ini文件吗? (如果是这样,请参阅@Mark Ba​​ker的答案。) – 2011-04-04 21:20:51

回答

0

我不认为PHP有​​一个,但继承人一个简单的函数来做到这一点(测试):

$array2 = array(); 
foreach($array1 as $value) 
{ 
    $values = explode("=", $value); 
    if(count($values) > 1) 
    { 
     $newValue = ""; 
     for($i = 1; $i < count($values); $i++) 
     { 
      $newValue .= $values[$i]; 
     } 

     $array2[$values[0]] = $newValue; 
    } 
    else 
    { 
     $array2[] = $value; 
    } 
} 
+0

这不会考虑到字符串可能包含多个“等号”...... – NemoStein 2011-04-04 21:13:34

+0

已修复,即使基于给定字符串的内容不包含更多不止一个。 – 2011-04-04 21:16:21

+0

请不要发布未经测试的代码。测试并发布,或不发布。 – 2011-04-04 21:23:11

0

虽然有点蛮力方法,下面应该工作:

<?php 
    $testArray = array('[RESPONSE]', 'DESCRIPTION=Attribute value is not unique', 'CODE=540', 'QUEUETIME=0.003', 'RUNTIME=0.003'); 
    $newArray = array(); 

    foreach($testArray as $element) { 
     if(strpos($element, '=') !== false) { 
      list($key, $value) = explode('=', $element, 2); 
      $newArray[$key] = $value; 
     } 
    } 

    print_r($newArray); 
?> 
1

如果这是我的想法,为什么不使用PHP内置的parse_ini_file()函数将文件自动读入关联数组?或parse_ini_string()如果它不是来自文件源?

+0

因为这可能不是你想象的? – NemoStein 2011-04-04 21:12:56

+1

它可能不是我认为的@NemoStein,但它看起来像是.ini文件的一部分......如果我没有提出建议,我会失职,并提供更多的解析方法来解析数组可以通过单个函数调用轻松解析 – 2011-04-04 21:16:41