Получите ключ связанного массива PHP в цикле - PullRequest
0 голосов
/ 17 февраля 2009

У меня есть следующий код:

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".

Ответы [ 4 ]

5 голосов
/ 17 февраля 2009

Используйте цикл 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';

Вместо циклического перебора всех столбцов.

5 голосов
/ 17 февраля 2009

Видите MYSQL_NUM у вас там? То есть ваши данные будут возвращаться с использованием индексов столбцов в качестве ключей (т. Е. 0, 1, 2 и т. Д.) .

Вы должны либо

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, чтобы сделать его ссылкой.

Я бы сделал последнее (я предпочитаю от foreach до for:)

1 голос
/ 17 февраля 2009

Пауло понял это почти точно:

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, а не просто его копию.

0 голосов
/ 17 февраля 2009

Я не уверен, что это именно то, что вы хотите, но:

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

Это добавит @ gmail.com к строке электронной почты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...