2015-10-11 2 views
0

Это похоже на простую задачу, но я не смог найти способ сделать это. У меня есть вывод данных, хранящихся в виде строки, например так:Как преобразовать строку массива в массив в PHP?

$rawData = "array('first' => '$first', 'middle' => '$middle', 'last' => '$last')"; 

Что мне просто нужно сделать, это преобразовать его в массив:

$arrData = array('first' => "$first", 'middle' => "$middle", 'last' => "$last"); 

Ближайший я был в состоянии получить это ниже с print_r результатами:

$Data = explode(',', $rawData); 

Array 
(
    [0] => 'first' => '$first' 
    [1] => 'middle' => '$middle' 
    [2] => 'last' => '$last' 
) 

Что мне нужно это:

Array 
(
    [first] => $first 
    [middle] => $middle 
    [last] => $last 
) 

Должно быть, что-то очень легкое, я забыл. Пожалуйста помоги.

+0

Я потратил много времени, смотря на подобные вопросы на этом сайте, и, глядя на W3Schools и другие ссылки. Я знаю, что я должен игнорировать что-то простое, но не могу найти его. Было бы высоко оценено что-то большее, чем просто -1 голос. Спасибо – user1028866

+0

Я видел, что у этого парня был аналогичный вопрос, но он начинал с массива. Я должен начать с строки. http://stackoverflow.com/questions/684553/convert-php-array-string-into-an-array – user1028866

ответ

1

Это делает то, что вы хотите (я думаю), даже если его не очень

<?php 

$arr = array(); 
$first = 'one'; 
$middle = 'two'; 
$last = 'three'; 

$rawData = "array('first' => '$first', 'middle' => '$middle', 'last' => '$last')"; 

$arrData = explode(',', (str_replace(array('array(\'', '=>', '\')', '\''), array('', '%@@%', '', ''), $rawData))); 

foreach($arrData as $val) { 
    $v = explode('%@@%', $val); 
    $arr[trim($v[0])] = trim($v[1]); 
} 

echo '<pre>' . print_r($arr, true) . '</pre>'; 

?> 
+0

Спасибо, что ответили Тому. Я получаю следующую ошибку: – user1028866

+0

Ошибка анализа: синтаксическая ошибка, неожиданная '[' in: для $ arrData [] = explode ('% @@%', $ val) [1]; – user1028866

+0

ОК, получил редактирование, и теперь он работает. Большое спасибо за ответ. Я думал, что будет гораздо более простой способ сделать это! – user1028866

2

В зависимости от того, где вы получите строку из, вы можете использовать eval. Настоятельно рекомендуется не использовать эту функцию, всякий раз, когда содержимое этой строки может влиять прямо или косвенно на пользователя, см. Подсказку на http://php.net/manual/en/function.eval.php. И он должен содержать действительный синтаксис PHP, тем самым поставив его в Try/поймать блока необходимо:

$evalArray = false; 
$first = 'a'; 
$middle = 'b'; 
$last = 'c'; 

$rawData = "array('first' => '$first', 'middle' => '$middle', 'last' => '$last')"; 

try { 
    $evalArray = eval($rawData); 
} catch ($e) 
{ 
    echo "parsing failed " . $e 
} 

print_r($evalArray); 
+0

Спасибо, Аксель, я прочитаю ссылку, которую вы указали. – user1028866

+0

Эта цитата в конце была довольно показательной! «Если eval() является ответом, вы почти наверняка задаете неправильный вопрос ». - Rasmus Lerdorf, BDFL PHP Еще раз спасибо. – user1028866

+0

Справа. Bt, чтобы перепроектировать это, требуется гораздо больше информации, как описано в вашем вопросе! –

Смежные вопросы