[英]PHP json string: getting an associative array object
我有一個像這樣的數據的json文件(這是顯示結構的文件的部分視圖):
{
"state": {
"ALABAMA": {
"ZOLD": [ "101", "102" ],
"ZNEW": [ "11", "12" ]
},
"ALASKA": {
"ZOLD": [ "5001", "5002", "5003", "5004", "5005", "5006", "5007", "5008", "5009", "5010"],
"ZNEW": [ "21", "22", "23", "24", "25", "26", "27", "28", "29", "20"]
}
}
}
我想要做的是搜索它以在ZOLD字段= $ OLD中找到一個值,然后返回相應的ZNEW數組的值。 我嘗試過使用foreach並且可以讓陣列回響,但我不確定它的價值。 這是我的代碼:
function translateZone($OLD)
{
$OLD = "5010"; //for testing purposes a constant but will be variable
$zStr = file_get_contents('getnew.json');
$zJson = json_decode($zStr,true);
foreach($zJson as $key=> $jsons)
{
foreach($jsons as $key=>$values)
{
foreach($values as $key=>$vals)
{
$counter=0;
foreach($vals as $key=>$vls)
{
$counter ++;
echo var_dump($vls);//I can see the values,but now what?
if ($vls == $OLD)
{
$zTemp = Help here -some array value of counter??
}
}
}
return $zTemp;
}
}
我搜索了一堆其他問題,但沒有發現足夠接近問題的東西。
附加信息:我可能知道也可能不知道“州”字符串(即“阿拉斯加”),但我可能希望根據找到的值返回此信息。
謝謝您的幫助。
您可以使用array_search (假設$OLD
值只能在數據中出現一次),而不是嘗試遍歷ZOLD。 此函數將為您搜索的值的索引返回一個數字,如果找不到它,則返回false
:
$index = array_search($OLD,$values['ZOLD']);
if ($index !== FALSE) {
$zTemp = $values['ZNEW'][$index];
}
這將替換你的兩個最里面的for循環(因為你需要其他循環來達到這個級別)並迭代每個狀態。 此時, $key
將被定義為您的州名。
這是另一種完成任務的方法,這個方法有array_map
函數:
$jsonArray = json_decode($your_file_content, true);
$oldVal = "5005";
$result = [];
foreach( $jsonArray["state"] as $k => $v ) {
/**
* Here we're building an array or pairs ZOLD => ZNEW values
*/
$pairs = array_map(function($o, $n) {
return [ $o => $n ];
}, $v["ZOLD"], $v["ZNEW"]);
/**
* Filling up the result
*/
foreach( $pairs as $p )
if( isset($p[$oldVal]) )
$result[] = [
"state" => $k,
"ZNEW" => $p[$oldVal]
];
}
var_dump($result);
如果找到相應的ZNEW值, $result
dump將包含帶有“state”和“ZNEW”鍵的列表或assoc數組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.