不确定PHP数组在分配时正在做什么

在这里一个数据库snippit代码……我会发布相关的行而不进行错误检查以使其变小…

if ($stmt->bind_result($row[0], $row[1]) === false) etc...

然后下面我…

<pre><code>
    //fill the array up with an array of rows, then increment $ddp.
    //$data[$ddp] is the row,
    //$data[$dpp][0] is the rows first argument,
    //$data[$dpp][1] is the rows 2nd argument returned etc...

    $ddp = 0; // this increments up every fetch

    while ($stmt->fetch()) {
        $data[$ddp][0] = $row[0];
        $data[$ddp][1] = $row[1];
        $ddp++;
    }
</code></pre>

我上面的方式工作….但这里是我以前做过的事情和一些奇怪的事情……

<pre><code>
    $ddp = 0; // this increments up every fetch

    while ($stmt->fetch()) {
        $data[$ddp++] = $row;
        // I ECHOd out $row here... and it did fetch 2 different rows...
    }
</code></pre>

会发生什么……当我这样做的时候……

$data[$ddp++] = $row;

$data [0] [0]与$data [1] [0]相同.

那么为什么$row在2次读取时有不同的值… $data数据最终与2个数组相同?

我甚至试过了

$data[] = $row;

和相同的结果.我的修复是……

while ($stmt->fetch()) {
    $data[$ddp][0] = $row[0];
    $data[$ddp][1] = $row[1];
    $ddp++;
}

为什么?

很抱歉,如果这不是正确的地方,但我确实提前找到了解决方案,为了节省时间,我将答案和问题放在一起.

解决方法:

你的两个作业正在做两件微妙不同的事情.

while ($stmt->fetch()) {
    $data[$ddp][0] = $row[0];
    $data[$ddp][1] = $row[1];
    $ddp++;
}

这会在数组中创建两个条目 – 第一个将具有索引[0] [0],并在$row [0]中分配值,依此类推.

另一方面,这个:

while ($stmt->fetch()) {
    $data[$ddp++] = $row;
    // I ECHOd out $row here... and it did fetch 2 different rows...
}

正在向数据库添加一行,并在第一次运行时将整个$row添加到$data [0].因此,从数据库返回的任何内容都会按原样添加 – 如果您从fetch()获取一个数组,那么您将在数组中添加一个数组.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...