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 循环中使用两个 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 回答