从一个json文件中创建单独的php数组

时间:2016-12-21 12:31:46

标签: php arrays json

我有这个json源文件:

{
  "results":
    [
      {
        "movie_title":"A Monster Calls",
        "cinema":"downtown"
      },
      {
        "movie_title":"A Monster Calls",
        "cinema":"uptown"
      },
      {
        "movie_title":"A Monster Calls",
        "cinema":"downtown"
      },
      {
        "movie_title":"A Monster Calls",
        "cinema":"downtown"
      }
    ]
}

我正在编写这样的数组(为了清晰起见而简化):

$json_data = json_decode($html, true);
for($i = 0; $i < count($json_data['results']); $i++) {

    $movieTitle = $json_data['results'][$i]["movie_title"];
    $cinema = $json_data['results'][$i]["cinema"];

    $moviesList[]= array(
      "movieTitle" => $movieTitle,
      "cinema" => $cinema
    );
}

但我想要做的是输出2个独立的数组。一个是在“市中心”电影院放映的所有电影,另一个是在“住宅区”展示的所有电影。 json文件中的顺序会改变,所以我必须按名称进行。

最好的方法是什么?

4 个答案:

答案 0 :(得分:1)

foreach ($json_data['results'] as $result) {
  $cinema = $result['cinema'];
  $moviesList[$cinema] []= [
    "movieTitle" => $result['movie_title'],
    // ...
  ];
}

代码按cinema字段对结果进行分类,并将它们存储到$moviesList数组中。因此,例如,uptown结果将存储到$moviesList['uptown']

答案 1 :(得分:1)

$downtownArray = array();
$uptownArray = array();

$json_data = json_decode($html, true);
for($i = 0; $i < count($json_data['results']); $i++) {

    $movieTitle = $json_data['results'][$i]["movie_title"];
    $cinema = $json_data['results'][$i]["cinema"];

    if ($cinema == 'uptown') {
        $uptownArray[]= array(
            "movieTitle" => $movieTitle,
            "cinema" => $cinema
        );  
    } else {
        $downtownArray[]= array(
            "movieTitle" => $movieTitle,
            "cinema" => $cinema
        );
    }
}

答案 2 :(得分:0)

您可以尝试这样的事情

    $json_data = json_decode($html, true);
$moviesDwn=array();
 $moviesUp=array();
    for($i = 0; $i < count($json_data['results']); $i++) {

        $movieTitle = $json_data['results'][$i]["movie_title"];
        $cinema = $json_data['results'][$i]["cinema"];
       if ($json_data['results'][$i]["cinema"]='uptown')
        $moviesUp[]= array(
          "movieTitle" => $movieTitle,
          "cinema" => $cinema
        );
    else if  ($json_data['results'][$i]["cinema"]='updown')
        $moviesDwn[]= array(
          "movieTitle" => $movieTitle,
          "cinema" => $cinema
        );
    }

答案 3 :(得分:0)

首先,请 FIX 你JSON,因为它有一些额外的逗号然后尝试使用以下代码

  

如果你想分开两个数组而不是使用 foreach(){};

 awk -F'\t' -v OFS='\t' '                   
NR == FNR {min[NR]=$2; max[NR]=$3; Gene[NR]=$NF; next}
 {                
     for (id in min) 
         if (min[id] < $2 && $2 < max[id]) {
             print $0, id, Gene[id]
             break              
         }
}                                     
' file1 file2

OR

  

如果您想对索引进行其他操作,请使用 for(){};

UL

<强>输出

padding-left: 0;