#php #json #parsing
#php #json #синтаксический анализ
Вопрос:
Мне нужна помощь, чтобы найти / распечатать все значения в данном массиве.
Я могу получить все значения на «уровне 1» массива, но не глубже. Каков общий код для разбора многоуровневых массивов. Я полагаю, что если я смогу разобрать api json, то смогу сделать с данными все, что требуется.
Я также получаю предупреждения о преобразовании массива в строку, но я явно называю элемент — должно быть, я что-то упускаю.
<?php
$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);
print_r($data_drugs); // Dump all data of the Array
foreach ($data_drugs as $key => $value)
{
if (empty($value[0]["searchTerm"])) {echo "-<br>";} else {echo "searchTerm : " . $value[0]["searchTerm"] . "<br>";};
if (empty($value[0]["searchTerm"])) {echo "-<br>";} else {echo "searchTerm : " . $value[0]["searchTerm"] . "<br>";};
if (empty($value[0]["drugName"])) {echo "-<br>";} else {echo "drugName : " . $value[0]["drugName"] . "<br>";};
if (empty($value[0]["chemblId"])) {echo "-<br>";} else {echo "chemblId : " . $value[0]["chemblId"] . "<br>";};
if (empty($value[0]["interactions"])) {echo "INTERACTIONS : NONE" . "<br>";} else {echo "INTERACTIONS : " . $value[0]["interactions"] . "<br>";};
if (empty($value[0]["interactions"][0]["interactionId"])) {echo "-<br>";} else {echo ">InteractionId : " . $value[0]["interactions"][0]["interactionId"] . "<br>";};
if (empty($value[0]["interactions"][0]["interactionTypes"])) {echo "INTERACTION TYPES : NONE" . "<br>";} else {echo ">Interaction Types : " . $value[0]["interactions"][0]["interactionTypes"] . "<br>";};
foreach ($data_drugs as $key => $value)
{
if (empty($value[0]["interactions"][0]["interactionTypes"][0])) {echo "-";} else {echo ">>interactionTypes : " . $value[0]["interactions"][0]["interactionTypes"][0] . "<br>";};
}
if (empty($value[0]["interactions"][0]["geneName"])) {echo "-<br>";} else {echo ">GeneName : " . $value[0]["interactions"][0]["geneName"] . "<br>";};
if (empty($value[0]["interactions"][0]["geneLongName"])) {echo "-<br>";} else {echo ">GeneLongName : " . $value[0]["interactions"][0]["geneLongName"] . "<br>";};
if (empty($value[0]["interactions"][0]["geneEntrezId"])) {echo "-<br>";} else {echo ">GeneEntrezId : " . $value[0]["interactions"][0]["geneEntrezId"] . "<br>";};
if (empty($value[0]["interactions"][0]["sources"])) {echo "SOURCES : NONE" . "<br>";} else {echo ">Sources : " . $value[0]["interactions"][0]["sources"] . "<br>";};
if (empty($value[0]["interactions"][0]["sources"][0])) {echo "-<br>";} else {echo ">>sources : " . $value[0]["interactions"][0]["sources"][0] . "<br>";};
if (empty($value[0]["interactions"][0]["pmids"])) {echo ">PMIDs : NONE" . "<br>";} else {echo ">PMIDs : " . $value[0]["interactions"][0]["pmids"] . "<br>";};
if (empty($value[0]["interactions"][0]["pmids"][0])) {echo "-<br>";} else {echo ">>PMIDs : " . $value[0]["interactions"][0]["pmids"][0] . "<br>";};
if (empty($value[0]["interactions"][0]["score"])) {echo "-<br>";} else {echo ">Score : " . $value[0]["interactions"][0]["score"] . "<br>";};
}
?>
Я могу получить все значения на «уровне 1» массива, но не глубже. Каков общий код для разбора многоуровневых массивов. Я полагаю, что если я смогу разобрать api json, то смогу сделать с данными все, что требуется.
Я также получаю предупреждения о преобразовании массива в строку, но я явно называю элемент.
Комментарии:
1. Вам следует рассмотреть возможность использования рекурсивной функции, которая обходит весь массив.
2. вы пробовали?
3. Нет, я чувствовал, что в вашем ответе недостаточно информации, которую я мог бы применить.
4. Теперь я работаю с 4 циклами ‘for’, циклически перебирающими уровни для получения значений echo, но это долго и требует полной перезаписи для каждого нового типа вызова api. В идеале я хотел бы повторить ключи вместо значений ключей жесткого кодирования и иметь простой алгоритм, который работает с любой структурой массива.
5. Я не помню, чтобы давал вам ответ… и снова, вы, вероятно, ищете рекурсивную функцию ( простой алгоритм ) для обхода вашего массива. Таким образом, у вас есть полная гибкость (т. Е. Не требуется жесткого кодирования) для элегантной обработки массивов разного размера и глубины.