Помогите составить регулярное выражение для парсинга json в зависимости от переменной на PHP
Как правильно при помощи регулярных выражений на PHP извлечь из json значение конкретного ключа, зная значение другого ключа? Имеется некоторая переменная $request, в которую можно записать, например, image1, и надо записать в другую переменную $result значение ключа value, т.е. blue. (см. пример ниже)
{
"value": "blue",
"name": "image1"
},
{
"value": "green",
"name": "image2"
},
{
"value": "red",
"name": "image3"
}
Помогите составить такое регулярное выражение.
<?php
$data = '{ "value": "blue", "name": "image1" }, { "value": "green", "name": "image2" }, { "value": "red", "name": "image3" }';
preg_match(('?<="value": ").*(?="[^}]+?image3'), $data, $matches);
print_r($matches[1]);
?>
Ответы (2 шт):
Автор решения: dIm0n
→ Ссылка
Находит значение ключа value, когда далее есть какой-то image:
(?<="value":\h").*(?="[^}]+?image)
{
"value": "blue",
"name": "image1"
},
{
"value": "green",
"name": "image2"
},
{
"value": "red",
"name": "image3"
}
Сгенерированный код:
$re = '/(?<="value": ").*(?="[^}]+?image)/m';
$str = ' {
"value": "blue",
"name": "image1"
},
{
"value": "green",
"name": "image2"
},
{
"value": "red",
"name": "image3"
}';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Автор решения: xRef
→ Ссылка
Можно же просто использовать json_decode и foreach:
$data = '[{ "value": "blue", "name": "image1" }, { "value": "green", "name": "image2" }, { "value": "red", "name": "image3" }]';
$arr = json_decode($data, true);
$value = "";
foreach ($arr as $row)
{
if ($row["name"] == "image1")
{
$value = $row["value"];
break;
}
}
echo $value; // blue