PHP foreach循环不起作用

时间:2013-10-26 16:31:52

标签: php foreach

我在html表单中有多个select元素(方法 - 帖子)。我想将$ songs数组转换为有序列表中的转换。

<select name="songs" multiple>
  <option>song 1</option>
  <option>song 2</option>
  <option>song 3</option>
  <option>song 4</option>
  <option>song 5</option>
  <option>song 6</option>
  <option>song 7</option>
  <option>song 8</option>
  <option>song 9</option>
  <option>...</option>
</select>

我写了以下php代码

 $songs = test_input($_POST["songs"]);
 foreach ($songs as $song) 
 {
   $songs .= "<li>$song</li>";
 };

 $songList = "Songs: <ol> $songs </ol> \r\n";
 echo $songList;

 function test_input($data)
 {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
      return $data;
 }

但它给了我一个错误Invalid argument supplied for foreach()

有人请告诉我foreach()循环

出了什么问题

如果函数test_input()返回String而不是Array,那么我应该怎么做才能将$songs转换为有序列表?

3 个答案:

答案 0 :(得分:1)

以下内容应该有效:

<?php
$songs = $_POST["songs"];
//$songs = Array("one","two","three");
foreach ($songs as $song) 
{
   $songStr = test_input($song);
   $songsOut .= "<li>$songStr</li>";
};

$songList = "Songs: <ol> $songsOut </ol> \r\n";
echo $songList;

function test_input($data)
{
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}

?>

test_input()需要在数组中的每个项目上单独调用,而不是在数组本身上调用。

你确定帖子数据实际上是一个数组吗?我用get字符串测试了我的代码(所以我可以在浏览器栏中输入它),它需要以下语法:

http://localhost/songs.php?songs[]=one&songs[]=two&songs[]=three

foreach错误消息将说明$ POST关联数组未返回值数组,取消注释我的代码中的第二行将有助于调试此问题。如果您发布生成$ POST的代码,我们也可以检查它!

编辑 - 更改多个选择元素的名称似乎对我有用:

<select name="songs[]" multiple>
  <option>song 1</option>
  <option>song 2</option>
  <option>song 3</option>
  <option>...</option>
</select>

请参阅:Multi-select to Array

答案 1 :(得分:0)

这是因为你在循环时改变了$songs。您应该为html字符串使用不同的变量:

 $songs = test_input($_POST["songs"]);
 $html = '';
 foreach ($songs as $song) 
 {
   $html .= "<li>$song</li>";
 }

 $songList = "Songs: <ol> $html </ol> \r\n";
 echo $songList;

答案 2 :(得分:0)

test_input($_POST["songs"]);应该是一个数组,你的代码是完美的。 test_input($_POST["songs"]);但应该返回一个数组

使用函数$songs

检查is_array()是否为数组
$songs = array('a','b');
    if (is_array($songs))
    {
         foreach ($songs as $song) 
         {
           $songs .= "<li>$song</li>";
         }
    }else{
     echo "its not an array";
    }
$songList = "Songs: <ol> $songs </ol> \r\n";
echo $songList;`  //output:  Songs: <ol> Array<li>a</li><li>b</li> </ol> 
相关问题