1

2 つの配列 (そのうちの 1 つは配列の配列) を使用して PHP でループすることにより、SQL クエリを作成しようとしています。

    //build array of arrays using predefined arrays
$regions = array_filter(array($EAPRO, $WCARO, $ROSA, $TACRO, $MENA, $ESARO));

//just a normal array
$regionnames = array('EAPRO', 'WCARO', 'ROSA', 'TACRO', 'MENA', 'ESARO');

$sql = "";

foreach(array_combine($regions, $regionnames) as $region => $regionname)
{
$sql .="UPDATE `database`.`table` SET `region`='$regionname' 
WHERE `countryname` IN (" . implode(",",$region) . ");";
}
echo $sql;

ただし、ideone でこれをデバッグすると、次のようになります。

Warning: implode(): Invalid arguments passed on line:
UPDATE `database`.`table` SET `region`='ESARO' WHERE `countryname` IN ();

これは、各ループの配列が正しく内破されていないことを示しています。配列の配列を定義した方法に何か問題がありますか?

ありがとう

4

1 に答える 1

1

PHPドキュメントから:array_combine ( array $keys , array $values )

問題は、変数が間違った場所にあることですarray_combine($regions, $regionnames)(キーが配列になることはありません)。

したがって、これで問題が解決するはずです:

    //build array of arrays using predefined arrays
$regions = array_filter(array($EAPRO, $WCARO, $ROSA, $TACRO, $MENA, $ESARO));

//just a normal array
$regionnames = array('EAPRO', 'WCARO', 'ROSA', 'TACRO', 'MENA', 'ESARO');

$sql = "";

foreach(array_combine($regionnames, $regions) as $region => $regionname)
{
$sql .="UPDATE `database`.`table` SET `region`='$regionname' 
WHERE `countryname` IN (" . implode(",",$region) . ");";
}
echo $sql;
于 2012-10-21T23:20:28.537 に答える