使用PHP获取JSON键的索引

6

我希望能够找到类似于这个问题在json数组中查找关键字的索引,但是我需要使用php解决。

这里是我的json数据(部分数据)

{   
"currentOver":{
    "events":[]
},  
"matchString":"",
"currentPlayer":5, 
"previousOvers":[], 
"innings":[],   
"scorecards":[
    {
        "batting":{
            "players":[
                        {"id":16447,"name":"Rahul Roy"},
                        {"id":12633,"name":"Sijal Thomas"},
                        {"id":16446,"name":"Mohammed Reza"},
                        {"id":16509,"name":"Asif Khan"},
                        {"id":12633,"name":"Koyel Dijesh"},
                        {"id":16468,"name":"Shahrook"},
                        {"id":64691,"name":"Shafiq"},
                        {"id":6518,"name":"Ubaidulah"}
            ]
        }
    }
]

}

以及PHP

foreach ($read_json->scorecards->batting->players as $batsmen => $val) {    
                if($val == 5) {   // if batsman index is 5 then display his name
                    $name = $batsmen->name;

                    echo "<div>$name</div>\n"; 

                }               
}

请帮我解决这个问题。提前感谢。


问题出在哪里?你卡在哪段代码上了? - Rizier123
将此 JavaScript 转换为 PHP:function getObjectKeyIndex($obj, $keyToFind) { $i = 0; foreach ($obj as $key => $value) { if ($key == $keyToFind) { return $i; } $i++; } return null;} - user4796879
预期输出是什么? - chris97ong
7个回答

8
我认为这可以满足你的需求。
以下是代码示例。 http://codepad.org/XQDCKAsB
       $json  = '{"currentOver":{"events": []},"matchString":"","currentPlayer":5,"previousOvers":[],"innings":[],"scorecards":[{"batting":{"players":[{"id":16447,"name":"Rahul Roy"},{"id":12633,"name":"Sijal Thomas"},{"id":16446,"name":"Mohammed Reza"},{"id":16509,"name":"Asif Khan"},{"id":12633,"name":"Koyel Dijesh"},{"id":16468,"name":"Shahrook"},{"id":64691,"name":"Shafiq"},{"id":6518,"name":"Ubaidulah"}]}}]}';

       $arr = json_decode($json);

       echo '<pre>';

       $currentPlayer = $arr->currentPlayer;

       echo $arr->scorecards[0]->batting->players[$currentPlayer-1]->name; 

就像@Andrew所说的那样,确保递减当前玩家值以获取正确的索引;) - BlackBurn027

3

尝试这段代码。

$info = json_decode('json string');
$currentPlayer = $info->currentPlayer;
$batsman = $info->scorecards[0]->batting->players[$currentPlayer];
echo "<div>{$batsman->name}</div>\n";

此外,请注意PHP中的数组是从零开始的。如果JSON数据中的currentPlayer索引基于1(虽然很少见,但有时确实存在),则您需要使用
$batsman = $info->scorecards[0]->batting->players[$currentPlayer - 1];

从数组中获取正确的元素。

FYI,对于我的情况,不需要使用($currentPlayer - 1),$currentPlayer就可以工作。 - Dil Dilshan

3

如果您只是想修复您的foreach

  1. $read_json->scorecards->batting 应该变成 $read_json->scorecards[0]->batting

  2. if($val == 5) 应该变成 if($batsmen == 5)

  3. $name = $batsmen->name; 应该变成 $name = $val->name;


我明白了。但是在你的问题下面仍然显示赏金仍然开放。你需要点击你选择答案旁边的赏金奖励图标,就像这里所说的那样。 - Shadi

2
在Php中,如果你想使用foreach循环来修复它,可以使用以下代码:

Php中,如果您想使用foreach循环修复它,可以使用下面的代码:

foreach($json->entries as $row)

{

    foreach($row as $key => $val)
    {
        echo $key . ': ' . $val;
        echo '<br>';
    }

}

2
你需要使用json_decodearray_keys函数获取来自JSON的数组键。
$json = '{ "key1" : "watevr1", "key2" : "watevr2", "key3" : "watevr3" }';
$result = json_decode ($json, true);
$keys = array_keys($result);
print_r($keys); //Array ( [0] => key1 [1] => key2 [2] => key3 )

如何仅显示第五行? - Dil Dilshan
请在此处运行您的JSON [http://php.fnlist.com/php/json_decode],如果可以工作,那么让我做您想要的事情? - user6364857
请检查上面更新的JSON。现在我想获取位于第5行的玩家姓名。即,“Koyel Dijesh”。行号不是固定的,它在1到8之间变化。 - Dil Dilshan
抱歉,我在 JSON 中漏掉了一行,现在已经添加上了。它来自于 JSON 本身的 "currentPlayer":5。 - Dil Dilshan
@BlackBurn027。是的,你说得对。你上面的方法不错,但让我检查一下它是否有帮助。谢谢。 - Dil Dilshan
显示剩余6条评论

1
请看以下代码。
$json=json_decode($data)->scorecards[0]->batting->players;
foreach ($json as $key => $value) {
  if($key==5){
    echo $value->name ;
  }
}

1
你可以通过将JSON字符串转换为数组来完成。
$json_str = '{   
"currentOver":{
    "events":[]
},  
"matchString":"",
"currentPlayer":5, 
"previousOvers":[], 
"innings":[],   
"scorecards":[
    {
        "batting":{
            "players":[
                        {"id":16447,"name":"Rahul Roy"},
                        {"id":12633,"name":"Sijal Thomas"},
                        {"id":16446,"name":"Mohammed Reza"},
                        {"id":16509,"name":"Asif Khan"},
                        {"id":12633,"name":"Koyel Dijesh"},
                        {"id":16468,"name":"Shahrook"},
                        {"id":64691,"name":"Shafiq"},
                        {"id":6518,"name":"Ubaidulah"}
            ]
        }
    }
]

}';

使用“json_decode”解码您的JSON字符串,即可获得数组。
$json_decode_str = json_decode($json_str, true);

现在使用foreach,你可以做任何事情。
if($json_decode_str['scorecards']){

    foreach($json_decode_str['scorecards'] as $scorecard){

        $player_index = 1;
        if($scorecard['batting']['players']){

            foreach($scorecard['batting']['players'] as $player){

                if($player_index == 5){
                    echo $player['name'];
                }

                $player_index++;
            }

        }

    }

}

也许这个可以帮助你 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接