2015-01-12 3 views
0

У меня есть строка пары значений ключа, которую я хотел бы преобразовать в функциональный массив. Чтобы я мог ссылаться на значения, используя их ключ. Прямо сейчас у меня есть это:Ключевое значение Array From String

$Array = "'Type'=>'Honda', 'Color'=>'Red'"; 
$MyArray = array($Array); 

Это не возвращает функциональный ключ/значение массива. Мои пары значений ключа находятся в переменной строке, что означает, что => является частью строки, и я думаю, что это моя проблема. Любая помощь будет оценена по достоинству. Все, что я пытаюсь сделать, это преобразовать строку в функциональную пару ключ/значение, где я могу захватить значения с помощью ключа. Мои данные в строке, поэтому, пожалуйста, не отвечайте с ответом «выньте их из строки». Я знаю, что это будет работать:

$MyArray = array('Type'=>'Honda', 'Color'=>'Red'); 

Но мой probem является то, что данные уже в виде строки. Спасибо за любую помощь.

ответ

3

Нет прямого способа сделать это. Таким образом, вам нужно будет написать пользовательскую функцию для создания ключей и значений для каждого элемента.

Пример спецификации для пользовательской функции:

  • Используйте explode(), чтобы разделить каждый элемент, основанный на запятой.
  • Iterate над результатом и:
    • explode() на =>
    • Удалите ненужные символы, т.е. одиночные кавычки
    • магазин первый элемент в качестве ключа, а второй элемент в качестве значения
  • Возвращение массив.

Примечание: если ваши строки содержат разделители это будет более сложным.

1

Вам, как вы говорите, нужно «вынуть их из строчки». Но вам не нужно делать это вручную. Другой ответ использует взрыв; это прекрасный метод. Я покажу вам другой - то, что я думаю, что это самый простой способ заключается в использовании preg_match_all() (documentation), как это:

$string = "'Type'=>'Honda', 'Color'=>'Red'"; 
$array = array(); 
preg_match_all("/'(.+?)'=>'(.+?)'/", $string, $matches); 
foreach ($matches[1] as $i => $key) { 
    $array[$key] = $matches[2][$i]; 
} 
var_dump($array); 
+2

+ Это будет работать, если ключи и значения не содержат разделителей. –

+0

Да, хороший момент. Я предполагаю, что данные правильно сформированы в ответе. –

0

Вам нужно разобрать строку и извлечь данные:

$string = "'Type'=>'Honda', 'Color'=>'Red'"; 

$elements = explode(",",$string); 

$keyValuePairs = array(); 
foreach($elements as $element){ 
$keyValuePairs[] = explode("=>",$element); 
} 

var_dump($keyValuePairs); 

Теперь вы можете создать свой массив с помощью массива $ keyValuePairs.

+0

И для удаления одинарных кавычек вы можете использовать $ cleanString = str_replace ("'", "", $ searchString); – Whirlwind

0

Вот example одного, как вы можете это сделать -

$Array = "'Type'=>'Honda', 'Color'=>'Red'"; 
$realArray = explode(',',$Array); // get the items that will be in the new array 
$newArray = array(); 
foreach($realArray as $value) { 
    $arrayBit = explode('=>', $value); // split each item 
    $key = str_replace('\'', '', $arrayBit[0]); // clean up 
    $newValue = str_replace('\'', '', $arrayBit[1]); // clean up 
    $newArray[$key] = $newValue; // place the new item in the new array 
} 
print_r($newArray); // just to see the new array 
echo $newArray['Type']; // calls out one element 

Это может быть помещены в функцию, которая может быть расширена, так что каждый элемент получает очищенную должным образом (вместо грубой методы силы, показанной здесь), но демонстрирует основы.