私は、クエリのフォロー配列を持っている:配列をループし、パラメータを渡して文字列を返す無名関数を作成するにはどうすればよいですか?
<?php
$queries_0 = [
/*
Custom Info
*/
0=>"INSERT INTO tbl1(field1, field2,field3,created_at) VALUES ('$p[0]', '$p[2]', '$p[2]', 'CURRENT_TIMESTAMP');",
1=>"SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID)
WHERE
Shippers.ShipperName='$p[0]'",
/*
Payments
*/
2=>"SELECT * FROM Customers
WHERE City LIKE '$p[0]%';",
3=>"SELECT * FROM Customers
WHERE Country='$p[0]' AND City='$p[1]';",
];
目標は、唯一のキーと必要なパラメータを渡す目的のクエリを取得することです。
このその目標を達成するためには、私がやったことです:
$queries = array(
0=>function(array $p) {
return "INSERT INTO tbl1(field1, field2,field3,created_at) VALUES ('$p[0]', '$p[2]', '$p[2]', 'CURRENT_TIMESTAMP');";
},
1=>function(array $p) {
return "SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID)
WHERE
Shippers.ShipperName='$p[0]'";
},
2=>function(array $p) {
return "SELECT * FROM Customers
WHERE City LIKE '$p[0]%';";
},
3=>function(array $p) {
return "SELECT * FROM Customers
WHERE Country='$p[0]' AND City='$p[1]';";
}
);
テスト:
$sql=$queries[0](['f1','f2','f3']);
echo $sql;
$sql=$queries[3](['US','NewYork']);
echo $sql;
結果:
INSERT INTO tbl1(field1, field2,field3,created_at) VALUES ('f1', 'f3', 'f3', 'CURRENT_TIMESTAMP');
SELECT * FROM Customers WHERE Country='US' AND City='NewYork';
今、私はその配列クエリをクリーンアップしたいと思いますのようにする$ queries_0。ここでの目的は、関数の反復を避けることです。同じことをしているので、無関係な関数を作成し、パラメータ$ pを渡して文字列を返します。
これは無名関数せずに、これまでの私の試みであり、動作していない:
function get_sql(array $param) {
foreach ($param as $k => $p) {
return $queries_0[$k];//$queries_0[$k] is the string itsef.
}
}
$res=get_sql(["0"=>['f1','f2','f3']]);
echo $res; //null
無名関数の有無にかかわらずアプローチがどうあるべきか?
'$ res_'が 'get_sql'関数スコープにないため、' $ res'は 'null'です。エラー報告を 'E_ALL'に設定してください – Phil