2016-08-15 14 views
1

ことで、私は可能な値を含む配列があります。印刷ヘッダーとソート配列値

$auto_types = array(CHEVY, FORD, DODGE); 

をそして、私はそれらの値が含まれているアレイを持っている:私はリストを返したい

$my_cars = array(
    array("make" => "FORD", model => "Thunderbird", "year" => 1983), 
    array("make" => "FORD", model => "Mustang", "year" => 1971), 
    array("make" => "CHEVY", model => "Impala", "year" => 1995), 
    array("make" => "DODGE", model => "Charger", "year" => 2015), 
    array("make" => "CHEVY", model => "Corvette", "year" => 2011), 
    array("make" => "CHEVY", model => "Camaro", "year" => 2012) 
) 

をそれぞれのメイクのヘッダーを提供し、メイクによって各車をソートします。だから、出力は次のようになります。

CHEVY:
1995インパラ
2012コルベット
2011カマロ

DODGE:
2015チャージャー

FORD:
1983サンダーバード


1971マスタング

私はforeach()のループを実行してmakeでソートすることができますが、ここで重要な点は、すべての車のためにリストする代わりに、各メールのヘッダーが必要なことです。誰でもこれを行うには良い方法がありますか?最初の配列が必要なのかどうかはわかりませんが、その時点で配列を作成するのは良い考えのようでした。

+0

の可能性のある重複[PHPで指定されたキーの値によって連想配列の配列をソートする方法?](http://stackoverflow.com/questions/ 1597736/how-to-sort-array-of-associative-array-by-a-given-key-in-php) –

+1

彼は具体的にどのようにヘッダを印刷するかを尋ねています** 、メーカーの車がリストされる前に。私は彼がすでにそれらを並べ替える方法のアイデアを持っていることを理解しています。 –

答えて

3

まず、配列をmakeでソートします。あなたはarray_multisort()の助けを借りてそれを行うことができます。

リスト出力のために配列をループすると、前の車の製造元を格納する変数を保持できます。それで、新しいメイクがあるときはいつも、車のエントリーの前にヘッダーを印刷してください。

$ex_make = ''; 

foreach($my_cars as $car) { 
    ... 
    if ($car['make'] != $ex_make) { 
     print_header($car['make']); 
    } 
    ... 
    $ex_make = $car['make']; 
} 

カーをmakeで多次元配列にグループ化すると、簡単に車をグループ化できます。ソートプロセス(および他の回答で提案されているグループ化ループ)からあなたを救います。多くの車が来ている場合は、代わりにデータベースを使用することを検討してください。

+0

シンプルで効果的です。ありがとう、ありがとう! – dougblitz210

+0

ようこそ。私は、「そのヘッダーを印刷したい」*という要点を見落とした、丁寧な答えにはとても喜んでいました。これらのループのいずれかを使用してかどうかにかかわらず、あなたのcar'rraysをグループ化することに気を付けるならば、ソースデータを変更することで(私にはもっと合理的です)、各メインループの先頭にヘッダーを印刷することができます配列のメイクレベルを繰り返します)。しかし、シンプルです。 ;) –

+0

ソースデータは実際にソースから問題のあるソースを編集するようになっているCMSから来ているので、問題を適切に説明した簡単な例を作りたかっただけです。 – dougblitz210

1

最初の配列は必要ありません。あなたが行うがアルファベット順に表示したい場合は、

foreach ($my_cars as $car) { 
    $makes[$car['make']][] = $car; 
} 

あなたはksort($makes)次のことができます。あなたはメイクして、グループに車を1つのループを使用することができます。

次にループを作成し、それぞれの車を印刷します。

0
<?php 

$my_cars = array(
    array("make" => "FORD", "model" => "Thunderbird", "year" => 1983), 
    array("make" => "FORD", "model" => "Mustang", "year" => 1971), 
    array("make" => "CHEVY", "model" => "Impala", "year" => 1995), 
    array("make" => "DODGE", "model" => "Charger", "year" => 2015), 
    array("make" => "CHEVY", "model" => "Corvette", "year" => 2011), 
    array("make" => "CHEVY", "model" => "Camaro", "year" => 2012) 
); 

// defining empty arrays for each models 
$ford = []; 
$chevy = []; 
$dodge = []; 

// loop through every car and push to the right array model 
foreach($my_cars as $array) { 
    if($array['make'] == "FORD") { 
    array_push($ford, $array); 
    } elseif($array['make'] == "CHEVY") { 
    array_push($chevy, $array); 
    } else { 
    array_push($dodge, $array); 
    } 
} 

// echo the result by looping inside each array model 
foreach($dodge as $car) { 
    echo $car['year'] . ':' . $car['model'] . '<br />'; 
} 

echo '<br />'; 

foreach($ford as $car) { 
    echo $car['year'] . ':' . $car['model'] . '<br />'; 
} 

echo '<br />'; 

foreach($chevy as $car) { 
    echo $car['year'] . ':' . $car['model'] . '<br />'; 
} 
-1

ここでネストループが理想的です。

<?php 
     $auto_types = array("CHEVY", "FORD", "DODGE"); 
     $my_cars = array(
      array("make" => "FORD", "model" => "Thunderbird", "year" => 1983), 
      array("make" => "FORD", "model" => "Mustang",  "year" => 1971), 
      array("make" => "CHEVY", "model" => "Impala",  "year" => 1995), 
      array("make" => "DODGE", "model" => "Charger",  "year" => 2015), 
      array("make" => "CHEVY", "model" => "Corvette",  "year" => 2011), 
      array("make" => "CHEVY", "model" => "Camaro",  "year" => 2012) 
     ); 

     $arr = []; 
     foreach($my_cars as $my_car){ 
      foreach($auto_types as $auto_type){ 
       if($make = array_search($auto_type, $my_car)){ 
        $desc = $my_car['make'] . " " . $my_car['year'] . " " . $my_car['model']; 
        if(!array_key_exists($auto_type, $arr)){ 
         $arr[$auto_type] = $desc; 
        }else{ 
         $arr[$auto_type] = $arr[$auto_type] . " " . $my_car['year'] . " " . $my_car['model'] . ""; 
        } 
       } 
      } 
     } 
     ksort($arr); 

     var_dump ($arr); 
     // PRODUCES::   
     array (size=3) 
      'CHEVY' => string 'CHEVY 1995 Impala 2011 Corvette 2012 Camaro' (length=49) 
      'DODGE' => string 'DODGE 2015 Charger' (length=18) 
      'FORD' => string 'FORD 1983 Thunderbird 1971 Mustang' (length=37) 

     $output = implode("<br />", $arr); 
     echo $output; 

     // PRODUCES:: 
     CHEVY 1995 Impala 2011 Corvette 2012 Camaro 
     DODGE 2015 Charger 
     FORD 1983 Thunderbird 1971 Mustang 

有効符号

<?php 
     $arr = []; 
     foreach($my_cars as $my_car){ 
      foreach($auto_types as $auto_type){ 
       if($make = array_search($auto_type, $my_car)){ 
        $desc = $my_car['make'] . " " . $my_car['year'] . " " . $my_car['model']; 
        if(!array_key_exists($auto_type, $arr)){ 
         $arr[$auto_type] = $desc; 
        }else{ 
         $arr[$auto_type] = $arr[$auto_type] . " " . $my_car['year'] . " " . $my_car['model'] . ""; 
        } 
       } 
      } 
     } 
     ksort($arr); 
     $output = implode("<br />", $arr); //<== GET STRING VALUE... 
     echo $output;