implode()[function.implode]

时间:2011-12-23 18:46:12

标签: php

我收到错误警告:implode()[function.implode]:第13行/home/social/public_html/form_test.php中传递的参数无效我不知道为什么我收到了这个错误。

if (is_array($_POST['wmeet']))
    foreach ($_POST['wmeet'] as $key => $value) 
    $_POST['wmeet'][$key] = mysql_real_escape_string(stripslashes($value));
    $wmeet = implode(" ",$_POST['wmeet']);

    echo '<pre>'; print_r($wmeet); echo '</pre>';

5 个答案:

答案 0 :(得分:2)

很难从你的缩进中看出来,但你的问题可能会丢失。您需要它们在条件或循环中运行多行代码:

if (is_array($_POST['wmeet'])) {
    foreach ($_POST['wmeet'] as $key => $value) {
        ...
        ...
    }
    ...
}

我猜测正在发生的事情是,当wmeet不是数组时,由于缺少大括号,implode()正在运行。

答案 1 :(得分:2)

您没有使用大括号。当您检查is_array时,if语句仅适用于以下行(for each)。 for each也仅应用于以下行,然后if块结束。

这意味着当您使用implode()时,它位于if块之外,因此无法确保您的参数是数组。您应该查看Alex的答案并相应地调整您的代码,以便implode()行位于if区块内。

您的代码现在的功能如下:

if (is_array($_POST['wmeet'])) {
    foreach ($_POST['wmeet'] as $key => $value) {
        $_POST['wmeet'][$key] = mysql_real_escape_string(stripslashes($value));
    }
}

$wmeet = implode(" ",$_POST['wmeet']);

echo '<pre>'; print_r($wmeet); echo '</pre>';

什么时候应该是这样的:

if (is_array($_POST['wmeet'])) {
    foreach ($_POST['wmeet'] as $key => $value) {
        $_POST['wmeet'][$key] = mysql_real_escape_string(stripslashes($value));
    }

    $wmeet = implode(" ",$_POST['wmeet']);
    echo '<pre>'; print_r($wmeet); echo '</pre>';
}

答案 2 :(得分:2)

即使is_array($_POST['wmeet']条件为false,您的内爆函数也会被调用。在if条件中使用你拥有的大括号

if (is_array($_POST['wmeet']))
{
    foreach ($_POST['wmeet'] as $key => $value) 
    $_POST['wmeet'][$key] = mysql_real_escape_string(stripslashes($value));
    $wmeet = implode(" ",$_POST['wmeet']);
    echo '<pre>'; print_r($wmeet); echo '</pre>';
}

另外,您可能希望在大括号中添加foreach语句,如下所示:

if (is_array($_POST['wmeet']))
{
    foreach ($_POST['wmeet'] as $key => $value)
    {
        $_POST['wmeet'][$key] = mysql_real_escape_string(stripslashes($value));
    }
    $wmeet = implode(" ",$_POST['wmeet']);
    echo '<pre>'; print_r($wmeet); echo '</pre>';
}

编辑:我刚刚注意到您正在尝试内爆一个关联数组。我不认为implode适用于关联数组。

我在php.net上找到了这个代码(http://www.php.net/manual/en/function.implode.php#103861 by tl at magus dot dk),这对于可能对你有用的关联数组。

$ assoc_array = array(“Key1”=&gt;“Value1”,“Key2”=&gt;“Value2”);

$ new_array = array_map(create_function('$ key,$ value','return $ key。“:”。$ value。“#”;'),array_keys($ assoc_array),array_values($ assoc_array));

print implode($ new_array);

将输出:

Key1:Value1#Key2:Value2#

答案 3 :(得分:1)

您的$_POST['wmeet']似乎是一个关联数组。

可能是这样的:

$new_array = array_map(create_function('$key, $value', 'return $key."=".$value;'), array_keys($_POST['wmeet']), array_values($_POST['wmeet']));
print implode(" ", $new_array);

这将使$ _POST ['wmeet']关联数组成为一个可以在以后内爆的普通数组。

它会打印类似

的内容
key1=value1 key2=value2 ... keyN=valueN

答案 4 :(得分:1)

我不记得有可能对$ _POST值进行内爆。并检查这些括号

尝试

if (is_array($_POST['wmeet']))
{
    $postWmeet = $_POST['wmeet'];
    foreach ($_POST['wmeet'] as $key => $value)
    {
       $postWmeet[$key] = mysql_real_escape_string(stripslashes($value));
       $wmeet = implode(" ",$postWmeet);

       echo '<pre>'; print_r($wmeet); echo '</pre>';
    }
}