不确定分配时 PHP 数组在做啥

Posted

技术标签:

【中文标题】不确定分配时 PHP 数组在做啥【英文标题】:Unsure what PHP array is doing upon assigning不确定分配时 PHP 数组在做什么 【发布时间】:2015-08-07 06:32:55 【问题描述】:

我在这里有一个 DB 代码片段...我将发布相关行而不进行错误检查以使其更小...

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++;

为什么?

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

【问题讨论】:

【参考方案1】:

你的两个任务是做两件微妙不同的事情。

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() 获取一个数组,那么您就是在数组中添加一个数组。

【讨论】:

哦!!!谢谢!!!我什至没有注意到!剩下的时间到了,我会接受你的回答!我相信还剩 6 分钟! 在我的脑海中...我在想... $row 会像这样添加到 $data[$ddp++] 中.. $data[0] = array $row 并自动放入$row[0] 和 $row[1]! 是的,$row 是一个包含 2 条数据的数组。当我采取不正确的方式时...... $data[0][0] 和 $data[1][0] 都持有相同的数据(要检索的最后一行),我觉得这很奇怪...... 我想不出一个简单的方法来做到这一点。数组操作可能令人沮丧,因为这两种方法都是有效的(并且您可能会在不同时间选择一种方法而不是另一种方法)。为了使事情更清楚,您可能希望将数据库中的数据视为对象,而不是数组,因此您有一个对象数组 - 更容易跟踪。 啊!好主意……关于对象。我是 OOP 的新手,但我认为我可以在其中工作!非常感谢!!!

以上是关于不确定分配时 PHP 数组在做啥的主要内容,如果未能解决你的问题,请参考以下文章

调试这个 LISP 病毒在做啥

PHP AES 加密...不知道我在做啥

我想得到我的目录。信息到多维数组 - PHP

是否可以在 Rust 运行时确定大小的堆栈分配数组?

如何处理在运行时确定类型的数组的声明和分配?

我被黑了,现在我有一个奇怪的 PHP 文件。它在做啥?