我有这个数组:
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
循环所需的结果。
如何达到预期效果?
答案 0 :(得分:3)
因为你继续将你的字符串附加到内循环中的同一个$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 . ')';
}
另外,检查您想要的输出。括号似乎不平衡,字符串不加引号。你确定它是你想要的吗?
答案 1 :(得分:2)
重置变量$insert
。
foreach ($tables as $table => $queries) {
$insert = '';
foreach ($queries as $query) {
$insert .= $query['column'] . '=>' . $query['value'] . ',';
}
echo 'insert(' . $table . ', array(' . $insert . ')';
}