簡體   English   中英

PHP json string:獲取關聯數組對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM