У меня есть строка пары ключ-значение, которую я хотел бы преобразовать в функциональный массив. Так что я могу ссылаться на значения, используя их ключ. Прямо сейчас у меня есть это:
$Array = "'Type'=>'Honda', 'Color'=>'Red'";
$MyArray = array($Array);
Это не возвращает функциональный массив ключ / значение. Мои пары ключ-значение находятся в переменной строке, что означает, что => является частью строки, и я думаю, что это где моя проблема. Любая помощь будет оценена. Все, что я пытаюсь сделать, это преобразовать строку в функциональную пару ключ / значение, где я могу получить значения с помощью ключа. Мои данные находятся в строке, поэтому, пожалуйста, не отвечайте с ответом «извлеките их из строки». Я знаю, что это будет работать:
$MyArray = array('Type'=>'Honda', 'Color'=>'Red');
Но моя проблема заключается в том, что данные уже в виде строки. Спасибо за любую помощь.
Нет прямого способа сделать это. Таким образом, вам нужно написать пользовательскую функцию для построения ключей и значений для каждого элемента.
Пример спецификации для пользовательской функции:
explode()
разделить каждый элемент на основе запятой.explode()
на =>
Заметка: если ваши строки содержат разделители, это будет более сложным.
Вам нужно «вынуть их из строки», как вы говорите. Но вам не нужно делать это вручную. Другой ответ использует взрыв; Это хороший метод. Я покажу вам другое — я думаю, что самый простой способ — это использовать 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);
Вам нужно проанализировать строку и извлечь данные:
$string = "'Type'=>'Honda', 'Color'=>'Red'";
$elements = explode(",",$string);
$keyValuePairs = array();
foreach($elements as $element){
$keyValuePairs[] = explode("=>",$element);
}
var_dump($keyValuePairs);
Теперь вы можете создать свой массив с помощью массива $ keyValuePairs.
Вот пример одним способом вы можете сделать это —
$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
Это может быть помещено в функцию, которая может быть расширена, чтобы каждый элемент был очищен должным образом (вместо метода грубой силы, показанного здесь), но демонстрирует основы.