PHP foreach неверное значение - PullRequest
       7

PHP foreach неверное значение

0 голосов
/ 10 сентября 2010

У меня есть несколько таких в моем коде HTML:

<input class="table" type="checkbox" name="interest[]" value="finger food" />

и это в моем коде PHP:

$checkboxes = stripslashes($_POST['interest']);

//process the checkboxes
foreach ($checkboxes as $value) {
    $selectedChkbx .= $value . ", ";
}

Я получаю:

Предупреждение: для foreach () передан неверный аргумент foreach ()

, и моя переменная $selectedChkbx не получает внутри себя никаких значений.Кто-нибудь знает, что я делаю не так?

Ответы [ 6 ]

3 голосов
/ 10 сентября 2010

stripslashes, вероятно, превращает массив в строку.Это означает, что $checkboxes является строкой, и вы не можете использовать строку в foreach.

. Либо применить stripslashes к каждому значению массива внутри foreach:

foreach ($_POST['interest'] as $value) {
    $selectedChkbx .= stripslashes($value) . ", ";
}

Или используйте array_map, чтобы применить функцию к каждому значению массива:

$checkboxes = array_map('stripslashes', $_POST['interest']);

Затем вы можете объединить значения с помощью implode:

$selectedChkbx = implode(',', $checkboxes);

И если ваш код stripslashes предназначен для отмены эффектов Магические кавычки , лучше попробуйте отключить их .

2 голосов
/ 10 сентября 2010

просто избавься от этой бесполезной функции полосок

Я бы сделал это всего одной строкой:

$selectedChkbx = implode(", ",$_POST['interest']);
0 голосов
/ 10 сентября 2010

Stripslashes приведёт возвращаемое значение к строке. Тем не менее, люди, отвечающие здесь, не могут позволить себе роскошь "чувак, просто избавься от полосок" или "отключи магические кавычки !!"

если вам или вашему другу нужна полоса-косые черты и по какой-то причине использовать магические кавычки (возможно, это общий хост), тогда вам следует включить функцию полоски-полосы для массивов.

например что-то вроде:

function myStripper($value) {
    if(is_array($value)) {
        foreach($value as $newValue) {
            return myStripper($newValue);
        }
    } else {
        return stripslashes($value);
    }
}

$checkboxes = myStripper($_POST['interest']);

//process the checkboxes
foreach ($checkboxes as $value) {
    $selectedChkbx .= $value . ", ";
}

должен выполнить трюк и рекурсивно удалить ваши переменные.

http://uk3.php.net/manual/en/function.stripslashes.php

0 голосов
/ 10 сентября 2010

Вы конвертируете его в строку, используя это:

$checkboxes = stripslashes($_POST['interest']);

Моя ставка заключается в том, что он присваивает значение, называемое "Массив", в качестве строки.Если вы хотите удалить косые черты из всего массива, используйте array_filter () .Но было бы разумнее просто отключить magic_quotes на сервере, чтобы вам не приходилось strip_slashes.

$checkboxes = array_filter($_POST['interest'], 'stripslashes');

Я бы настоятельно рекомендовал вам изучить проблему и исправить магические кавычкипроблема в ядре.

0 голосов
/ 10 сентября 2010

у вас есть это: $checkboxes = stripslashes($_POST['interest']);

Функция stripslashes преобразует массив $ _POST ['Interest'] в пустую строку.

Вместо этого вы должны просто:

foreach ($_POST['interest'] as $value) {
    $selectedChkbx .= stripslashes($value) . ", ";
}

Кроме того, магические цитаты устарели.Рекомендуется выключить его.

0 голосов
/ 10 сентября 2010

полоски ($ _ POST ['интереса']);

полосы не работают на массивах!

Сделайте так:

$checkboxes = $_POST['interest'];

//process the checkboxes
foreach ($checkboxes as $value) {
    $selectedChkbx .= stripslashes($value) . ", ";
}

Ответьте наВаш комментарий:

$array = array('zero', array('one', array('two', 'three', 'four'), 'five'), 'six', 'seven', array('eight'));

echo r_implode(", ", stripslashes_deep($array));

# code from http://ch.php.net/manual/en/function.stripslashes.php
function stripslashes_deep($value)
{
    $value = is_array($value) ?
                array_map('stripslashes_deep', $value) :
                stripslashes($value);

    return $value;
}


# code from http://php.net/manual/en/function.implode.php
function r_implode( $glue, $pieces )
{
  foreach( $pieces as $r_pieces )
  {
    if( is_array( $r_pieces ) )
    {
      $retVal[] = r_implode( $glue, $r_pieces );
    }
    else
    {
      $retVal[] = $r_pieces;
    }
  }
  return implode( $glue, $retVal );
} 

Это дает вам:

zero, one, two, three, four, five, six, seven, eight

Редактировать Заменена личная рекурсивная функция на более элегантную;)

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