获得对应于给定值的其他值?

时间:2014-02-12 06:27:09

标签: javascript php jquery json

我有一个JSON文件,里面有很多数据。

JSON文件示例:

{
   "thefirst": {
    "one": {
        "color1": "red",
        "color2": "blue"
    },
    "two": {
        "color3": "green",
        "color4": "purple"
    },
    "three": {
        "color5": "yellow",
        "color6": "white"
    }
   },
   "thesecond": {
    "one": {
        "color1": "black",
        "color2": "grey"
    },
    "two": {
        "color3": "navy",
        "color4": "white"
    },
    "three": {
        "color5": "purple",
        "color6": "red"
    }
   },
   "thethird": {
    "one": {
        "color1": "maroon",
        "color2": "white"
    },
    "two": {
        "color3": "red",
        "color4": "orange"
    },
    "three": {
        "color5": "green",
        "color6": "blue"
    }
   }
}

我的问题是,使用Jquery(客户端)$.getJSON...php,是否可以获得给定值的相应值? 因此,例如,对于每个red值,我希望相应的值为red。因此,对于上面的示例,这将是bluepurpleorange

我不知道它是否可能,所以我不确定如何去做。

我想知道使用Jquery $.each(array, function (key, value))...是否可行,或者使用php在解码JSON文件loop后可能生成foreach ($key => $Value)和/或json_decode

但我不确定该怎么做。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

解码 JSON 数据并嵌套两个级别并应用逻辑,如图所示。请参阅下面的工作演示。

<?php

$arr =json_decode($json,1); //<------- Pass your JSON string into the $json variable.
$str = "";
$keyword='red'; //<------- Pass any color you want to get its corresponding match
foreach($arr as $arr1)
{
    foreach($arr1 as $arr3)
    {
       foreach($arr3 as $k=>$v)
        {
            if(in_array($keyword,$arr3))
            {
            $str.=implode(' ',$arr3)." ";
            }
        }
    }
}
$str=trim(str_replace($keyword,'',$str));
$str_arr = explode(' ',$str);

print_r(array_values(array_filter(array_unique($str_arr),'strlen')));

<强> OUTPUT :

Array
(
    [0] => blue
    [1] => purple
    [2] => orange
)

Demo


  

感谢您的帮助。这就是我想要的。一个问题,   如果我想将输出数组保存到新的json文件中,我可以使用   json_encode和file_put_contents方法?

代码......

$outputarr =  array_values(array_filter(array_unique($str_arr),'strlen'));
$jsonencstring = json_encode($outputarr); //<-- This is a JSON now
file_put_contents('yourfilename.txt',$jsonencstring);