Я делаю некоторые тесты с использованием Behat, PHP и Guzzle для создания HTTP-запросов. Один из моей просьбы принес мне это тело ответа JSon:PHP - получить значение ключа в Json
{
"products":[
{
"id":1466367,
"sku":"PO870SHB32LET",
"name":"T\u00eanis Polo Ralph Lauren Kids Day Bege",
"brand_id":20901,
"brand":"Polo Ralph Lauren Kids",
"description":"test test test abc",
"price":124.9,
"original_price":179,
"gender":[
"menino",
"masculino"
]
}
]
}
Итак, я сделал эту функцию, чтобы получить значение:
public function getJsonFieldValue($keyword)
{
$responseBody = $this->getResponse()->json();
$jsonFieldValue = $this->recursiveFieldKeySearch($keyword,$responseBody);
}
public function recursiveFieldKeySearch($needle,$haystack) {
foreach($haystack as $key=>$value)
{
$current_key = $key;
if(!is_array($value) && $needle===$key) {
return $value;
}
if (is_array($value)) {
return self::recursiveFieldKeySearch($needle,$value);
}
}
return false;
}
Если значение равно «идентификатор», например, функция может найти и вернуть значение. Проблема в том, что когда я хочу получить значения «gender», моя функция всегда возвращает FALSE для меня. Кто-нибудь может мне помочь, пожалуйста?
Спасибо!
Почему вы "recursiveFieldKeySearch()"? Не зафиксирована ли структура ответа? Разве вы не знаете структуру? Такая общая функция, по-видимому, помогает, но на самом деле она может затруднить обнаружение ошибок. Напишите функцию для каждого важного значения из '$ responseBody', и все станет более понятным. – axiac
Нет элемента с ключом 'gender', который не имеет массива в качестве его значения, поэтому вы его никогда не найдете. И это не способ поиска вашей структуры, так как вы найдете произвольное значение, когда ключи не уникальны. Например, '0' в этом случае. – jeroen
@DiegoUlrichZegaib просто проверьте на is_array, если найдена игла. Посмотрите на мой ответ. – Kordi