Key Value Array From String

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

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

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

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

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

0

Решение

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

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

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

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

3

Другие решения

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

$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);
1

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

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

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

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

var_dump($keyValuePairs);

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

0

Вот пример одним способом вы можете сделать это —

$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

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

0
По вопросам рекламы [email protected]