PHP在循环期间仅将特定值分配给增量变量

时间:2013-07-11 13:47:52

标签: php

我有这个数组:

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

如何达到预期效果?

2 个答案:

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