【问题标题】:Iterate over JSON file using PHP [duplicate]使用 PHP 迭代 JSON 文件 [重复]
【发布时间】:2018-01-27 09:37:19
【问题描述】:

我有一个 JSON 文件,其中包含世界各地的大学列表。我只想获取数组中的某个字段与我需要选择的内容相匹配的特定大学。我面临的问题是每所大学都有自己的 ID 号,这让我无法弄清楚如何遍历数组。 JSON 文件可以在这个GitHub repo 上找到。

让我将 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 上的文档以及示例。但是仍然无法获得我上面提到的逻辑。

【问题讨论】:

标签: php arrays json for-loop foreach


【解决方案1】:

您需要阅读手册。

试试这个:

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

print_r($names);

【讨论】:

  • 您的代码只打印一所大学
  • 现在已修复。立即尝试。
【解决方案2】:

您可以在此处使用 array_filter http://php.net/manual/en/function.array-filter.php 函数和回调。然后,您可以使用 array_column http://php.net/manual/en/function.array-column.phpto 抓取“名称”列。

$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);

【讨论】:

  • 如何只打印大学名称?
  • @Tes3awy 我已经为你更新了我的示例
【解决方案3】:

您可以使用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

【讨论】:

    【解决方案4】:

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

    <?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); 
    

    ?>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 2019-04-07
      • 2014-06-13
      • 1970-01-01
      • 2017-07-31
      • 2018-11-29
      相关资源
      最近更新 更多