PHP在循环过程中只将特定值分配给增量变量


PHP assigning only specific values into an incremental variable during a loop

我有这个数组:

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