【问题标题】:How to lookup data in a json file using php如何使用 php 在 json 文件中查找数据
【发布时间】:2015-10-21 03:08:40
【问题描述】:

使用 PHP,我正在寻找通过 url 传递的 id,然后在 JSON 文件中查找一些数据...然后将数据显示回页面上。

我将网址设置为http://mytestapp.php?id=12345678,然后使用;

$id = $_GET['id']; 

设置 id 变量。然后我有一个如下的 JSON;

{
    "ads": 
    [
        {   "id":"12345678", 
            "hirername":"Test Hirer", 
            "hirercontact":"Rob A",
            "role":"Ultra Sat Role",
            "requirements": [
                {"req":"Right to work in Australia"},
                {"req":"Live locally"}],
            "candidates": [
                {"name":"John Smith","dist":"Nunawading (23km away)","exp1":"Pizza maker at Don Domenicos for 4 years","exp2":"Bakery Assistant at Woolworths for 4 years","req":"","avail1":"Mon to Fri | Morning, Evening & Night","avail2":"","call":"0413451007"},
                {"name":"Jack Smith","dist":"Endeadvour Hills (35km away)","exp1":"Pizzaiolo (Pizza maker) at Cuor Di Pizza for 1 year","exp2":"","req":"","avail1":"Mon to Fri | Morning & Evening","avail2":"","call":"041345690"}]
        }, 

        {   "id":"12345679", 
            "hirername":"Test Hirer 2", 
            "hirercontact":"Jesse S",
            "role":"Ultra Sat Role 2",
            "requirements": [
                {"req":"Right to work in Australia"},
                {"req":"Live locally"}],
            "candidates": [
                {"name":"Jill Smith","dist":"Nunawading (23km away)","exp1":"Pizza maker at Don Domenicos for 4 years","exp2":"Bakery Assistant at Woolworths for 4 years","req":"","avail1":"Mon to Fri | Morning, Evening & Night","avail2":"","call":"0413451007"},
                {"name":"Jenny Smith","dist":"Endeadvour Hills (35km away)","exp1":"Pizzaiolo (Pizza maker) at Cuor Di Pizza for 1 year","exp2":"","req":"","avail1":"Mon to Fri | Morning & Evening","avail2":"","call":"041345690"}]
        }

    ]
}   

我想搜索其中的id,然后能够将数据的内容回显出来。

我正在读取 JSON 并解码成这样的数组;

    $json = file_get_contents('data.json');
    $arr = json_decode($json, true);

但我现在不知道如何读取数组,根据id找到我想要的数据,然后把数据拉出来,这样我就可以在页面上显示如下;

Hirer: Test Hirer

Contact: Rob A 

Role: Ultra Sat Role



Requirements: 

- Right to work in Australia

- Live Locally



John Smith Nunawading (23km away) 

Pizza maker at Don Domenicos for 4 years 

Bakery Assistant at Woolworths for 4 years 

Mon to Fri | Morning, Evening & Night 

0413451007



Jack Smith Endeadvour Hills (35km away) 

Pizzaiolo (Pizza maker) at Cuor Di Pizza for 1 year 

Mon to Fri | Morning & Evening 

041345690

有什么想法吗?

谢谢罗。

【问题讨论】:

  • 你能补充一下你是如何阅读它的吗?你从哪里得到 json
  • 我已经更新了。谢谢。
  • 你的 json 无效
  • 哦,是的 - 我已经更新了。应该是有效的。谢谢。
  • 感谢@SusheelSingh,但我故意将数据存储在 JSON 文件中,而不是创建读取数据并返回单个对象的服务。 (创建一个 hacky 应用程序进行测试)。

标签: php arrays json loops


【解决方案1】:

从@RobbieAverill 借用示例并根据您的需要进行修改,请检查是否有效。

<?php
    $id = $_GET['id']; 

    $json = file_get_contents('data.json');

    $foundAd = null;
    $json = json_decode($json,true);
    foreach ($json['ads'] as $ad) {
        if ($ad['id'] == $id) {
            $foundAd = $ad;
            break;
        }
    }

    echo "Hirer:".$foundAd['hirername']."<br/>";
    echo "contact:".$foundAd['hirercontact']."<br/>";
    echo "role:".$foundAd['role']."<br/><br/>";

    echo "Requirements<br/>";

    echo "<ul>";
    foreach($foundAd['requirements'] as $req){
        echo "<li>".$req['req']."</li>";            
    }
    echo "</ul><br/>";

    foreach($foundAd['candidates'] as $req){
        echo $req['name']." ". $req['dist']."</br>";
        echo $req['exp1']."</br>";
        echo $req['exp1']."</br>";
        echo $req['avail1']."</br>";
        if($req['avail2']!=""){
            echo $req['avail2']."</br>";;       
        }
        echo $req['call']."</br></br>";
    }

?>

【讨论】:

  • 这会返回一个包含我想要的数据的数组...但是我如何遍历该数组以获取值并将它们回显出来?
  • 哪里有数组就用foreach else直接获取它,你应该在decode中传递true
  • 复制自我的示例。不错。
  • 你本可以回答@RobbieAverill 你没有回答所以我给了他一个详细的答案并修改了它也不是完整的副本。
  • 干杯哥们,快乐编码
【解决方案2】:

在您当前的实现中,您需要遍历所有广告对象,例如

foreach ($arr['ads'] as $ad){
    if ($ad['id'] == $id){
        //do stuff;
    }
}

更好的实现方式是在存储 json 时使用 id 的值作为 json 对象的键。使用类似的东西

$ads[id] = $yourjsonobject;

那么引用就是$arr['ads'][id];

然后您可以使用多个 foreach,或者如果您知道您的键,只需使用键来输出您需要的对象

echo $ad["hirername"];

使用foreach 循环打印完整的对象:

foreach( $ad as $value){
    print_r($value);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多