我有这个数组:
Array
(
[users] => Array
(
[0] => Array
(
[column] => email
[value] => fskdjhfkjf@mai.com
)
[1] => Array
(
[column] => nickname
[value] => dpucci
)
)
[social] => Array
(
[0] => Array
(
[column] => user_id
[value] => opweirpor
)
)
)
从这个数组开始,我必须构建一个字符串,如下所示:
insert(users, array(email=>fskdjhfkjf@mai.com,nickname=>dpucci)
还有一个类似的:
insert(social, array(user_id=>opweirpor)
这就是我正在做的:
foreach ($tables as $table => $queries) {
foreach ($queries as $query) {
$insert .= $query['column'] . '=>' . $query['value'] . ',';
}
echo 'insert(' . $table . ', array(' . $insert . ')';
}
问题是我得到的结果如下:
insert(users, array(email=>fskdjhfkjf@mai.com,nickname=>dpucci)
和:
insert(social, array(email=>fskdjhfkjf@mai.com, nickname=>dpucci, user_id=>opweirpor)
这是因为变量$insert
在每个新循环中递增,并且它将添加所有结果,而不是仅添加我在每个$tables
循环中需要的结果。
我怎样才能达到预期的结果?
因为在多次运行的内部循环中,您一直将字符串附加到相同的$insert
。只需在完成insert
变量后,即在内部循环后清除即可。(未测试)
foreach ($tables as $table => $queries) {
foreach ($queries as $query) {
$insert .= $query['column'] . '=>' . $query['value'] . ',';
}
echo 'insert(' . $table . ', array(' . $insert . ')';
// add this line
$insert = "";
}
或者,将其放在内部foreach循环之前,这有一个优点,可以确保$insert
不会被以前的代码污染,或者以其他方式未初始化,从而发出PHP警告。
foreach ($tables as $table => $queries) {
// add this line
$insert = "";
foreach ($queries as $query) {
$insert .= $query['column'] . '=>' . $query['value'] . ',';
}
echo 'insert(' . $table . ', array(' . $insert . ')';
}
然而,您的代码实际上创建了
insert(users, array(email=>fskdjhfkjf@mai.com,nickname=>dpucci,)
注意dupcci
后面的逗号。我认为这不是你想要的。要解决此问题,只需使用substr
:删除尾部逗号
foreach ($tables as $table => $queries) {
// add this line
$insert = "";
foreach ($queries as $query) {
$insert .= $query['column'] . '=>' . $query['value'] . ',';
}
// add one more line here
$insert = substr($insert, 0, -1);
echo 'insert(' . $table . ', array(' . $insert . ')';
}
此外,检查您想要的输出。括号似乎不平衡,字符串也没有引号。你确定这是你想要的吗?
重置变量$insert
。
foreach ($tables as $table => $queries) {
$insert = '';
foreach ($queries as $query) {
$insert .= $query['column'] . '=>' . $query['value'] . ',';
}
echo 'insert(' . $table . ', array(' . $insert . ')';
}