matski
matski

Reputation: 541

Make separate php arrays from one json file

I have this json source file:

{
  "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"
      }
    ]
}

and I am writing my array like this (simplified for clarity):

$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
    );
}

But what I want to do is output 2 separate arrays. One is all films showing in "downtown" cinema, and the other array all films showing in "uptown". The order in the json file will change, so I have to do it by name.

What's the best way to do this?

Upvotes: 0

Views: 44

Answers (4)

Soni Vimalkumar
Soni Vimalkumar

Reputation: 1462

First of all please , FIXyou JSON ,as it has some extra comma and then try with below codes

If you want to just separate the two array than use foreach(){};

     foreach ($json_data['results'] as $result) {
        $DownTown_List[$result['cinema']] []= $result['movie_title'];
     }

OR

if you want to do other operation with the Indexes then use for(){};

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

        if($json_data['results'][$i]["cinema"] === "downtown"){
            $DownTown_List["downtown"][] = $json_data['results'][$i]["movie_title"];
        }
        if($json_data['results'][$i]["cinema"] === "uptown"){
           $DownTown_List["uptown"][] = $json_data['results'][$i]["movie_title"];
       }
    }
    echo "<pre>";print_r($DownTown_List);exit;

OUTPUT

Array
(
    [downtown] => Array
        (
            [0] => A Monster Calls
            [1] => A Monster Calls
            [2] => A Monster Calls
        )

    [uptown] => Array
        (
            [0] => A Monster Calls
        )

)

Upvotes: 0

Ruslan Osmanov
Ruslan Osmanov

Reputation: 21492

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

The code classifies the results by the cinema field and stores them into $moviesList array. So, for example, the uptown results will be stored into $moviesList['uptown'].

Upvotes: 1

dimis283
dimis283

Reputation: 222

You may try something like this

    $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
        );
    }

Upvotes: 0

brtsos
brtsos

Reputation: 371

$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
        );
    }
}

Upvotes: 1

Related Questions