【问题标题】:Get PHP assoc array key in loop在循环中获取 PHP assoc 数组键
【发布时间】:2009-02-17 15:19:40
【问题描述】:

我有以下代码:

while ($row = mysql_fetch_array($result, MYSQL_NUM)) 
    {
        for ($i=0; $i<count($row); $i++)
        {
            (DO THING HERE)
            $row[$i] = str_replace("\n", " ", $row[$i]);
            $row[$i] = str_replace("\r", " ", $row[$i]);
        }

    }

我基本上想做,如果关联数组键等于“email”(所以 $row['email'])然后附加“@gmail.com”到它。

【问题讨论】:

    标签: php


    【解决方案1】:

    看到你那里的MYSQL_NUM了吗? That is going to return your data using the column indexes as keys (ie 0, 1, 2, etc).

    你必须要么

    a) 找出email 字段的列索引并执行:

    while ($row = mysql_fetch_array($result, MYSQL_NUM)) 
    {
        // 'email' is in column number 5
        $row[5] .='@gmail.com';
    
        for ($i=0; $i<count($row); $i++)
        {
            $row[$i] = str_replace("\n", " ", $row[$i]);
            $row[$i] = str_replace("\r", " ", $row[$i]);
        }
    }
    

    b) 或者您可以将 MYSQL_NUM 更改为 MYSQL_ASSOC,然后执行以下操作:

    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
    {
        $row['email'] .='@gmail.com';
    
        foreach($row as &$value)
        {
            $value = str_replace("\n", " ", $value);
            $value = str_replace("\r", " ", $value);
        }
    }
    

    注意$value 之前的"&amp;" 以使其成为参考。

    我会做后者(我更喜欢 foreachfor :)

    【讨论】:

    • 完全咬住我的答案的方式兄弟。我要你一半的代表
    • @theman:这个 SO“心跳”实现是错误的。在我写我的时候,我什至没有看到你的答案。
    • crescentfresh,我看到了你对我的第一条评论,一切都很好,你的回复写得更好,我一直在开玩笑
    【解决方案2】:

    使用 foreach 循环并获取 assoc 数组的键和值。

    foreach($row as $key => &$value)
    {
        if($key == 'email') $value .= "@gmail.com";
    }
    

    如果你想返回一个关联数组,你应该使用mysql_fetch_array($result, MYSQL_ASSOC)

    附加到电子邮件密钥的更有效方法是:

    if(isset($row['email']))
        $row['email'] .= '@gmail.com';
    

    而不是循环遍历所有列。

    【讨论】:

    • 这不仅效率低下,而且也是错误的。他将 MYSQL_NUM 常量传递给它,因此没有关联键。谢谢
    • mysql_fetch_assoc() 也获取关联数组
    • 如果您要更改它,您不需要通过引用获取 $value 吗?即 foreach ($row as $key => & $value)
    • 亚当,你不能像那样在循环内更改 $value - 因为 foreach 操作的是真实数组的副本。你必须做 $row[$key] .= '@gmail.com'。干杯
    • adam peck,我看到你在意识到你错了之后编辑了你的答案。这是屈服于失败吗?我已经准备好让你道歉了
    【解决方案3】:

    Paulo 几乎完全正确:

    while ($row = mysql_fetch_assoc($result)) {
        foreach($row as $key => &$value) {
            if($key == 'email') $value .= '@gmail.com';
            $value = str_replace("\n", " ", $value);
            $value = str_replace("\r", " ", $value);
        }
    }
    

    注意foreach 行中的“&”。这意味着您正在修改 $row 数组中的值,而不仅仅是它的副本。

    【讨论】:

      【解决方案4】:

      我不确定这是否正是您想要的,但是:

      $row['email'].='@gmail.com';
      

      这会将@gmail.com 附加到电子邮件行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-08
        • 2012-06-15
        • 1970-01-01
        • 2017-08-15
        • 1970-01-01
        • 2019-04-29
        • 1970-01-01
        相关资源
        最近更新 更多