#php #json #parsing
#php #json #синтаксический анализ
Вопрос:
Я хочу написать код для выполнения цикла через многомерный массив (глубиной 4 или 5) и повторить все найденные ключи и значения и пропустить пустые массивы.
$drugs = fopen("http://dgidb.org/api/v2/interactions.json?drugs=FICLATUZUMAB", "r");
$json_drugs = stream_get_contents($drugs);
fclose($drugs);
$data_drugs = json_decode($json_drugs,true);
foreach ($data_drugs as $key => $value)
...
Кто-нибудь, кто угодно, Феррис?
Комментарии:
1. Используйте рекурсивную функцию.
2. Повторить все внутри массива? Хорошо…
print_r($data_drugs);
попробуйте это. Вам не нужноforeach
ставить print_r сразу после json_decode3. print_r ($data_drugs); нет, я хочу коснуться каждого элемента массива — если я могу это сделать, то я могу делать что угодно с содержимым массива, например, добавлять форматирование, логику и т.д.
Ответ №1:
Ваш $data_drugs больше не является json, после того как json_decode является ассоциативным массивом.
Вам не нужен какой-либо цикл для просмотра ключей и значений
$data_drugs = json_decode($json_drugs,true);
print_r($data_drugs);
/* or if you don't like inline */
echo'<pre>';
print_r($data_drugs);
echo'</pre>';
Вы можете использовать var_dump($data_drugs)
ключи и значения с типами, вероятно, вам это не нужно
Но если вы хотите больше отображать ключи и значения…необычное использование рекурсивной функции
function show($x){
foreach($x as $key=>$val){
echo"<p>$key : ";
if(is_array($val)){ echo". . ."; show($val);}
else{ echo"$val</p>";}}}
show($data_drugs);
Комментарии:
1. Мне это нравится, очень элегантно. Это то, что называется рекурсивной функцией (как предложено @Barmar выше), т. Е. Она вызывает саму себя?
2. @barnyard моя функция show() не является … ну, это ленивая версия, требуется немного больше, чтобы получить действительно элегантный дисплей 🙂 И да, это рекурсивный самопроизвольный вызов. В php для вызова функции вы должны ввести ее имя (с необходимыми параметрами) — как в последней строке. show() в 4-й строке имеет условие — если обрабатываемое значение является массивом, то вызывается самостоятельно: «сделайте мне для этого конкретного значения», в этом нет ничего особенного, один из методов. И да, правильное использование элегантно
3. Ну, это касается каждого элемента (ключа и значения) без жестко заданных имен индексов (как моя собственная попытка) в короткой повторно используемой функции — я думаю, это элегантно, потому что это так просто, форматирование вывода — это украшение. Спасибо @black blue