使用PHP迭代JSON文件

时间:2017-08-18 16:21:21

标签: php arrays json for-loop foreach

我有一个JSON文件,其中包含世界各地的大学列表。我想只获得特定的大学,其中数组中的字段与我需要选择的字段匹配。我面临的问题是每个大学都有自己的ID号,这使我无法弄清楚如何迭代阵列。可以在此GitHub repo。

上找到JSON文件

使我将JSON文件转换为数组的代码:

<?php
    $json = file_get_contents('universities_list.json');
    $universityArray = json_decode($json, true);

    print_r($universityArray);
?>

我得到的样本是:

[2942] => Array
        (
            [alpha_two_code] => EG
            [country] => Egypt
            [domain] => aast.edu
            [name] => Arab Academy for Science & Technology
            [web_page] => http://www.aast.edu/
        )

    [2943] => Array
        (
            [alpha_two_code] => EG
            [country] => Egypt
            [domain] => akhbaracademy.edu.eg
            [name] => Akhbar El Yom Academy
            [web_page] => http://www.akhbaracademy.edu.eg/
        )

仅打印alpha_two_code == 'EG'== 'Egypt'的大学的最佳或适当方式是什么?

我阅读了foreach loop上的文档和示例。但仍然无法得到我上面提到的逻辑。

4 个答案:

答案 0 :(得分:2)

选中此选项仅返回特定国家/地区

<?php
        $json = file_get_contents('university.json');
        $universityArray = json_decode($json, true);
        universities= array()
        for($i=0; $i< count($universityArray); $i++)
        {  
            if($universityArray[$i]["country"] == "Morocco")
             universitises[] = $universityArray[$i];
        }
        var_dump($universitises); 

&GT;

答案 1 :(得分:2)

您可以使用alpha_two_code作为索引。

$indexed = [];
foreach($universityArray as $university){
    $index = $university['alpha_two_code'];
    if(!isset($indexed[$index])){
        $indexed[$index] = [];
    }
    $indexed[$index][] = $university;
}

现在,您可以通过alpha_two_code分隔大学,您可以直接访问这些大学。

print_r($indexed['EG']);

现在,根据最佳和适当的部分,您可能希望缓存$indexed。您可以为大学创建一个目录,并在那里保存JSON编码$indexed

答案 2 :(得分:1)

您可以在此处使用array_filter http://php.net/manual/en/function.array-filter.php函数进行回调。然后,您可以使用array_column http://php.net/manual/en/function.array-column.phpto抓住名称&#39;列。

$json = file_get_contents('https://github.com/Hipo/university-domains-list/blob/master/world_universities_and_domains.json');
$universityArray = json_decode($json, true);

$filterBy = 'EG';

$newArray = array_filter($universityArray, function ($var) use ($filterBy) {
    return ($var['alpha_two_code'] == $filterBy);
});

print_r($newArray);

$names = array_column($newArray, 'name');

print_r($names);

答案 3 :(得分:1)

您需要阅读手册。

试试这个:

$names = array();
foreach($universityArray as $u) {
  if($u['alpha_two_code'] == 'EG' || $u['country'] == 'Egypt'){
    $names[] = $u['name'];
  }
}

print_r($names);