来自多个JSON文件的多级数组

时间:2012-04-27 01:29:46

标签: php arrays json multidimensional-array

我必须拉出一堆json文件,并根据这些文件中的信息创建链接,并以递归方式进入文件。

{
  "_v" : "12.2",
  "categories" : [ {
    "id" : "boys-hats-and-beanies",
    "name" : "Hats & Beanies"
    }
  ]
}

因此我需要构建另一个url来获取

的文件内容

http://xxx.xxx/?id=boys-hats-and=beanies.json

在该文件中我可能需要再次执行此操作。正如我现在所说的,它将我需要的信息放入许多数组中,我希望它能保持层次结构。

$allLinks['root'] = array();
$allLinks['firstLevel'] = array();
$allLinks['secondLevel'] = array();
$allLinks['thirdLevel'] = array();

    function getContent($info){
        $content = file_get_contents($info);
        return json_decode($content, true);
    }

    $new = getContent('https://xxx.xxx/?id=root');


    foreach ($new['categories'] as $name => $value) {
            array_push($allLinks['root'], 'https://xxx.xxx/?id='.$value['id']);
    }

    foreach ($allLinks['root'] as $name => $value) {
        $new = getContent($value);
        foreach ($new['categories'] as $name => $value) {
            array_push($allLinks['firstLevel'], 'https://xxx.xxx/?id='.$value['id']);
        }
    }

    foreach ($allLinks['firstLevel'] as $name => $value) {
        $new = getContent($value);
        foreach ($new['categories'] as $name => $value) {
            array_push($allLinks['secondLevel'], 'https://xxx.xxx/?id='.$value['id']);
        }
    }

    foreach ($allLinks['secondLevel'] as $name => $value) {
        $new = getContent($value);
        foreach ($new['categories'] as $name => $value) {
            array_push($allLinks['thirdLevel'], 'https://xxx.xxx/?id='.$value['id']);
        }
    }


    print_r($allLinks);

所以你可以看到我想要的东西。请任何帮助都会很棒!

1 个答案:

答案 0 :(得分:0)

看起来你试图将url存储在数组中,这应该返回多维数组中的所有url,其中0是第一级。

function getContent($info){
    $content = file_get_contents($info);
    return json_decode($content, true);
}

function getContentUrlById($id, $ext = '.json')
{
   return 'https://xxx.xxx/?id=' . $id . $ext;
}

function getContentRecursive($id = 'root', $level = 0)
{
    $result = array();
    $url = getContentUrlById($id);
    $content = getContent($url);
    $result[$level][] =  $url;
    foreach($content['categories'] as $cat){
      $result = array_merge_recursive($result, getContentRecursive($cat['id'], $level + 1));
    }

    return $result;
}