今私が持っています
Array(1 => Array("aaa","bbb","ccc"))
Array(2 => Array("eee","fff","ggg","hhh"))
そして、文字列を作りたい
$a = "ST_Union(ST_Union('aaa','bbb'),'ccc')"
$b = "ST_Union(ST_Union(ST_Union('eee','fff'),'ggg'),'hhh')"
PHPでこれを行うにはどうすればよいですか?
今私が持っています
Array(1 => Array("aaa","bbb","ccc"))
Array(2 => Array("eee","fff","ggg","hhh"))
そして、文字列を作りたい
$a = "ST_Union(ST_Union('aaa','bbb'),'ccc')"
$b = "ST_Union(ST_Union(ST_Union('eee','fff'),'ggg'),'hhh')"
PHPでこれを行うにはどうすればよいですか?
UPD:ソリューションを少し更新し、よりシンプルで読みやすくしました。
function wrapWithUnion(array $params)
{
if (is_null($params[0])) {
return "'{$params[1]}'";
}
return "ST_Union({$params[0]},'{$params[1]}')";
}
$arr = array("eee","fff","ggg","hhh");
$result = null;
foreach ($arr as $val) {
$result = wrapWithUnion(array($result, $val));
}
var_dump($result);
PHP では、 implode()関数を使用できます。この関数は、選択した「接着剤」で区切られた配列の要素を文字列に結合します。
例:
$arr1 = Array("aaa","bbb","ccc");
$str1 = implode(",",$arr1);
//aaa,bbb,ccc
$str2 = implode($arr1);
//aaabbbccc
これを試して。
function wrapWithUnion($input)
{
$template = 'ST_Union(%1$s, %2$s)';
$output = "'" . array_shift($input) . "'";
while ($item = array_shift($input))
{
$output = sprintf($template, $output, "'" . $item . "'");
}
return $output;
}
しかし、入力配列に含まれる項目が 2 つ未満の場合はどうすればよいでしょうか? この関数は、期待どおりにこれらのケースを処理しない場合があります。