0

我有这个数组:

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循环我需要的结果。

我怎样才能达到预期的效果?

4

2 回答 2

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 . ')';

}

另外,检查您想要的输出。似乎括号不平衡,字符串未加引号。你确定这是你想要的吗?

于 2013-07-11T13:50:38.350 回答
2

重置变量$insert

foreach ($tables as $table => $queries) {
    $insert = '';
    foreach ($queries as $query) {
        $insert .= $query['column'] . '=>' . $query['value'] . ',';
    }
    echo 'insert(' . $table . ', array(' . $insert . ')';
}
于 2013-07-11T13:53:40.670 回答