2017-12-04 8 views
-1

PHPスクリプトで解析されるJSONファイルのリザーブエンジニアリングに問題があります。次のようにJSONを分析するPHPコードは次のとおりです。PHPを使用したJSONの分析

// New search/info file 
$a_info = json_decode(file_get_contents('data/vehicles.json'), true); 

// Makes/Years options 
$a_year = array(); 
$a_make = array(); 

foreach($a_info AS $ai) { 

    if($ai[0]['make']) 
     var_dump($ai); 
     if(array_key_exists($ai[0]['make'], $a_make)) 
      $a_make[$ai[0]['make']] = $a_make[$ai[0]['make']] + 1; 
     else 
      $a_make[$ai[0]['make']] = 1; 

    if($ai[0]['year']) 
     if(array_key_exists($ai[0]['year'], $a_year)) 
      $a_year[$ai[0]['year']] = $a_year[$ai[0]['year']] + 1; 
     else 
      $a_year[$ai[0]['year']] = 1; 

} 

// Sort the make/years arrays 
krsort($a_year); 
ksort($a_make); 

var_dump($a_make); 

// New listing file 
$a_list = json_decode(file_get_contents('data/list.json'), true); 

foreach($a_list['listing_ids'] AS $index => $id) { 

    if(isset($_GET['year'])) 
     if($a_info[$id][0]['year'] != $_GET['year']) 
      unset($a_list['listing_ids'][$index]); 

    if(isset($_GET['make'])) 
     if($a_info[$id][0]['make'] != $_GET['make']) 
      unset($a_list['listing_ids'][$index]); 

    if(isset($_GET['search'])) { 

     // Check name 
     if(
      strpos(strtolower($a_info[$id][0]['name']), $_GET['search']) === false 
      AND strpos(strtolower($a_info[$id][0]['body']), $_GET['search']) === false 
      AND strpos(strtolower($a_info[$id][0]['year']), $_GET['search']) === false 
      AND strpos(strtolower($a_info[$id][0]['make']), $_GET['search']) === false 
     ) 
      unset($a_list['listing_ids'][$index]); 

    } 

} 

私はJSONを再構築しようとしているが、私は$のa_makeやPHPの配列a_year $に表示するために複数のモデルや年を取得することはできません。これは私がJSONのために持っているものです。

{ 
    "vechiles": [ 
    { 
     "make": "Accura", 
     "year": "2006" 
    }, 
    { 
     "make": "BMW", 
     "year": "200" 
    } 
    ] 
} 
+0

あなたは 'この' $のa_list'をprint_r'し、また、あなたが – Bluetree

答えて

0
$a_info = json_decode('{"vehicles":[{"year":"2006"},{"make":"BMW","year":"200"},{"make":"BMW","year":"200"},{"make":"BMW","year":"2007"},{"make":"Accura","year":"200"}]}'); 

$a_year = array(); 
$a_make = array(); 

foreach ($a_info->vehicles as $vehicle) { 
if (isset($vehicle->make)) { 
    if (array_key_exists($vehicle->make, $a_make)) { 
     $a_make[$vehicle->make] = $a_make[$vehicle->make] + 1; 
    } else { 
     $a_make[$vehicle->make] = 1; 
    } 
} 

if (isset($vehicle->year)) { 
    if (array_key_exists($vehicle->year, $a_year)) { 
     $a_year[$vehicle->year] = $a_year[$vehicle->year] + 1; 
    } else { 
     $a_year[$vehicle->year] = 1; 
    } 
} 
} 

krsort($a_year); 
ksort($a_make); 

var_dump($a_make, $a_year); 
+0

あなたの答えを教えてくださいしたい予想される出力を投稿することができます。このアプローチが望ましいアウトプットをどのように達成したか、そしてそれがうまくいく理由を正確にカバーするいくつかの文章は、OPの知識に本当に役立つでしょう。 – Bluetree

関連する問題