Задать вопрос
yarkov
@yarkov
Помог ответ? Отметь решением.

Как рекурсивно обойти JSON?

Пытаюсь распарсить файл закладок от Google Chrome. Как известно это просто файл в формате JSON. И вот че-то залип на рекурсии. Выводит пустую таблицу и хоть тресни. Где я натупил?
// читаем файл с закладками в формате JSON
$str = file_get_contents('Bookmarks');
$ar = json_decode($str);
$chld = $ar->roots->other->children;
$marks = array();
 
function recursiveJSON2ARRAY($obj, $arr){
	foreach($obj as $v){
		if(isset($v->children) && is_array($v->children) && count($v->children) > 0){
			foreach($v->children as $child){
				if(isset($child->url)){
					$arr[$child->date_added] = array('name'=>$child->name, 'url'=>$child->url);
				}
				else{
					recursiveJSON2ARRAY($child, $arr);
				}
			}
		}
		else{
			if(isset($v->url)){
				$arr[$v->date_added] = array('name'=>$v->name, 'url'=>$v->url);
			}
		}
	}
}

recursiveJSON2ARRAY($chld, $marks);

//krsort($marks); // Reverse sort the bookmarks by date added
 
$table = '<table cellspacing="2" cellpadding="2" border="1" width="600"><tr><td><b>Date</b></td><td><b>Name</b></td><td><b>URL</b></td></tr>';
foreach($marks as $date=>$mark)
{
	$table .= '<tr><td>'.date('H:m:s d-m-Y', $date).'</td><td>'.$mark['name'].'</td><td><a href="'.$mark['url'].'" target="_blank">'.$mark['url'].'</a></td></tr>';
}
$table .= '</table>';
 
echo $table;
  • Вопрос задан
  • 1569 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@MadridianFox
Web-программист, многостаночник
Может $arr надо передавать по ссылке?
Ответ написан
Комментировать
@iSensetivity
бухгалтер, програміст-самоук
$ar = json_decode($str, TRUE); // вернет масив. php.net/manual/ru/function.json-decode.php
$names= array_column($ar, 'name'); // рекурсивно найдет "name" php.net/manual/ru/function.array-column.php
Ответ написан
Комментировать
@somenugget
.
MadridianFox прав.
Сделай вот так
function recursiveJSON2ARRAY($obj, &$arr){
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы