0

これまでのところ、私はこの配列を達成しました

[1] => Array
    (
        [name] => Test
        [stations] => Array
            (
                [0] => Array
                    (
                        [name] => Name
                        [price] => 50.00
                        [description] => Description
                    )

                [1] => Array
                    (
                        [name] => Name Test
                        [price] => 135.00
                        [description] => Test
                    )
            )
    )
[2]=> Array
    (
        [name] => Test Name
        [stations] => Array
        (
            [0] => Array
                (
                    [name] => Name
                    [price] => 50.00
                    [description] => Description
                )
    )

これを行うには、入れ子になった foreach ループで 2 つの SQL クエリを使用します。ID は POST 値です:system_

$systems = "SELECT * FROM `systems` AS sys WHERE `sys`.`p_id`=:id";
$systemNumber = 0;
$stationNumber = 0;
foreach ($systems as $system) {

        $return[$systemNumber] = array(
            'name' => $system['system_name']
        );
$stations = "SELECT * FROM `stations` WHERE `system_id`=$system[system_id] AND `p_id` = :id";
foreach($stations as $station){
            $stationsArray[$stationNumber] = array(
                'name'=>$station['station_name'],
                'price'=>$station['price'],
                'description'=>$station['description'],
            );

            $return[$systemNumber]['stations'] = $stationsArray;
            $stationNumber++;
        }

        $systemNumber++;
}

これに関する問題は、以前の配列の上にステーションを構築していることです。つまり、配列は次のようになります。

...
[stations]=> Array(
  [0]=>...
  [1]=>...
  [2]=>...
  [3]=>...
  [4]=>...
)

ステーションが対応するシステムに接続されるようにするにはどうすればよいですか?

4

1 に答える 1

0

問題はループにあります。

ループの外で変数を 0 に設定しています

$systemNumber = 0;
$stationNumber = 0;

ただし、ループ内で、$stationsArray を何もない状態に再起動し、$stationNumber を 0 に再起動する必要があります。

foreach($stations as $station){

各ループで $stationNumber の値を増やし続けます。

$systems = "SELECT * FROM `systems` AS sys WHERE `sys`.`p_id`=:id";
$systemNumber = 0;
$stationNumber = 0;
foreach ($systems as $system) {

        $return[$systemNumber] = array(
            'name' => $system['system_name']
        );
$stations = "SELECT * FROM `stations` WHERE `system_id`=$system[system_id] AND `p_id` = :id";

$stationNumber = 0;
$stationsArray = array();

foreach($stations as $station){
            $stationsArray[$stationNumber] = array(
                'name'=>$station['station_name'],
                'price'=>$station['price'],
                'description'=>$station['description'],
            );

            $return[$systemNumber]['stations'] = $stationsArray;
            $stationNumber++;
        }

        $systemNumber++;
}
于 2013-05-01T21:30:22.077 に答える