2011-12-23 4 views
0

エラーが発生しました警告:implode()[function.implode]:無効な引数が/home/social/public_html/form_test.phpの13行目に渡されました私はなぜこのエラーが出るのかわからない。implode()[function.implode]

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

はたぶん不足している中括弧は、コピーの結果であり、SOに実際のファイルから貼り付けます。私は私の答えで中括弧を見落とした、以下の... – stratosgear

答えて

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

インデントしてもわかりにくいですが、問題に中かっこがない可能性があります。私は何が起こっているかを推測している

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

がwmeetが見つからないため、中括弧の配列でない場合に破()が実行されていることです:あなたはそれら条件またはループ内のコードの複数行を実行する必要があります。

1

あなたの$_POST['wmeet']が連想配列であるようです。

たぶんのようなもの:あなたは後で崩壊することができ、通常の配列に$ _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の値に内破を行うことが可能であることは覚えていない

key1=value1 key2=value2 ... keyN=valueN 
1

のようなものを出力します。 is_array($_POST['wmeet']条件が偽の場合でも、そして

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>'; 
    } 
} 
を試してみてください
2

にそれらのブラケットをチェックするあなたの破の関数が呼び出さなっています。

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>'; 
} 

はまた、あなたは次のように中括弧でforeach文を追加する可能性がある場合ことを持っているブレース連想配列私は、連想配列に対してimplodeが動作するとは思わない。

このコードは、php.net(http://www.php.net/manual/en/function.implode)で見つかりました。あなたのために役立つ可能性のある連想配列に対して、magus dot dkでのtlによるphp#103861)。

$ assoc_array = array( "Key1" => "Value1"、 "Key2" => "Value2"); ($ assoc_array)、array_values($ assoc_array));配列番号($ assoc_array)、配列番号($ assoc_array)、配列番号;

print implode($ new_array);

どちらが出力されます:

キー1:値1#キー2:値2#

関連する問題