Php 进入这个数组并构建SQL语句的最佳方法

Php 进入这个数组并构建SQL语句的最佳方法,php,algorithm,php-5.3,Php,Algorithm,Php 5.3,我有一个数组结果: Array ( [homeclub] => Array ( [0] => MAGA [1] => AGUI [2] => BRAV [3] => TIBU ) [homeclub_annotation] => Array ( [0] => 3

我有一个数组结果:

Array
(
    [homeclub] => Array
        (
            [0] => MAGA
            [1] => AGUI
            [2] => BRAV
            [3] => TIBU
        )

    [homeclub_annotation] => Array
        (
            [0] => 3
            [1] => 11
            [2] => 0
            [3] => 8
        )

    [game_inning] => Array
        (
            [0] => 9 inn
            [1] => 10 inn
            [2] => 1 inn
            [3] => 10 inn
        )

    [visitor] => Array
        (
            [0] => CARI
            [1] => LEON
            [2] => TIGR
            [3] => CARD
        )

    [visitor_annotation] => Array
        (
            [0] => 2
            [1] => 10
            [2] => 
            [3] => 10
        )

    [status] => Array
        (
            [0] => FIN
            [1] => FIN
            [2] => SUSP
            [3] => FIN
        )

)
我需要构建一个这样的句子(以每个子数组的位置0为例):


如何获得每个子阵列的正确位置?注意,要构建的句子从子数组和相同位置获取值,我应该使用foreach还是for?有什么帮助吗?

您首先需要构建一个简单的数组来处理sql insert:

$youArrDefinition = array(..blah blah..);

$rowsToInsert = array();

$rowsToInsert = array();


foreach ( $youArrDefinition as $keyCol =>  $groupCols ) {
    $i = 0;
    foreach( $groupCols as $colVal ) {
        $rowsToInsert[$i][$keyCol] = $colVal;  
        $i++; 
   }
这应该给你一个更好的数组来操作,比如:

array(
     array(
         'homeclub' => 'blah',
         'homeclub_annotation' => 'blah'
         // blah blah rest array
    ),
    array(
         'homeclub' => 'blah2',
         'homeclub_annotation' => 'blah2'
         // blah2 blah2 rest array2
    ),
    // rest of your array
);
这里有一个使用这个

<?php


$arr = Array
(
    'homeclub' => Array
        (
            0 => 'MAGA',
            1 => 'AGUI',
            2 => 'BRAV',
            3 => 'TIBU',
        ),

    'homeclub_annotation' => Array
        (
            0 => 3,
            1 => 11,
            2 => 0,
            3 => 8,
        ),

    'game_inning' => Array
        (
            0 => '9 inn',
            1 => '10 inn',
            2 => '1 inn',
            3 => '10 inn',
        ),

    'visitor' => Array
        (
            0 => 'CARI',
            1 => 'LEON',
            2 => 'TIGR',
            3 => 'CARD',
        ),

    'visitor_annotation' => Array
        (
            0 => 2,
            1 => 10,
            2 => 12,
            3 => 10,
        ),

    'status' => Array
        (
            0 => 'FIN',
            1 => 'FIN',
            2 => 'SUSP',
            3 => 'FIN',
        )

);

for($int = 0; $int < count($arr['homeclub']); $int++){


    $query = 'INSERT INTO tbl_games (teamA, teamA_annotation, teamB, teamB_annotation, game_date, game_status, game_time, game_place) VALUES(';

     foreach($arr AS $key => $val){
        $query .= (is_integer($val[$int])) ? $val[$int] . ', ' : '\'' . stripslashes($val[$int]) . '\', '; 
     }

    $query .= 'NOW(), NULL, NULL);';

    echo $query; // Complete query string, run this with your chosen DB handler.
}

?>

将上述回音保留在适当位置,您将获得以下

插入tbl_游戏(团队A、团队A_注释、团队B、, 团队注释、游戏日期、游戏状态、游戏时间、游戏地点) 值('MAGA',3',9 inn',CARI',2',FIN',NOW(),NULL,NULL)

插入tbl_游戏(团队A、团队A_注释、团队B、, 团队注释、游戏日期、游戏状态、游戏时间、游戏地点) 值('AGUI',11',10 inn','LEON',10',FIN',NOW(),NULL,NULL)

插入tbl_游戏(团队A、团队A_注释、团队B、, 团队注释、游戏日期、游戏状态、游戏时间、游戏地点) 值('BRAV',0',1 inn','TIGR',12',SUSP',NOW(),NULL,NULL)

插入tbl_游戏(团队A、团队A_注释、团队B、, 团队注释、游戏日期、游戏状态、游戏时间、游戏地点) 值('TIBU',8',10 inn',CARD',10',FIN',NOW(),NULL,NULL)


我得到了一个空数组作为结果,这是真的,但几乎没有自定义项。。所以我编辑了我的答案。我还做了一个演示->
<?php


$arr = Array
(
    'homeclub' => Array
        (
            0 => 'MAGA',
            1 => 'AGUI',
            2 => 'BRAV',
            3 => 'TIBU',
        ),

    'homeclub_annotation' => Array
        (
            0 => 3,
            1 => 11,
            2 => 0,
            3 => 8,
        ),

    'game_inning' => Array
        (
            0 => '9 inn',
            1 => '10 inn',
            2 => '1 inn',
            3 => '10 inn',
        ),

    'visitor' => Array
        (
            0 => 'CARI',
            1 => 'LEON',
            2 => 'TIGR',
            3 => 'CARD',
        ),

    'visitor_annotation' => Array
        (
            0 => 2,
            1 => 10,
            2 => 12,
            3 => 10,
        ),

    'status' => Array
        (
            0 => 'FIN',
            1 => 'FIN',
            2 => 'SUSP',
            3 => 'FIN',
        )

);

for($int = 0; $int < count($arr['homeclub']); $int++){


    $query = 'INSERT INTO tbl_games (teamA, teamA_annotation, teamB, teamB_annotation, game_date, game_status, game_time, game_place) VALUES(';

     foreach($arr AS $key => $val){
        $query .= (is_integer($val[$int])) ? $val[$int] . ', ' : '\'' . stripslashes($val[$int]) . '\', '; 
     }

    $query .= 'NOW(), NULL, NULL);';

    echo $query; // Complete query string, run this with your chosen DB handler.
}

?>