PHP数组问题

时间:2011-07-15 17:33:45

标签: php arrays foreach

我对数组和foreach有疑问。

如果我有这样的数组:

$test_arr = array();
$test_arr['name1'] = "an example sentence";
$test_arr['anything'] = "dsfasfasgsdfg";
$test_arr['code'] = "4334refwewe";
$test_arr['empty1'] = "";
$test_arr['3242'] = "";

我怎样才能做一个foreach并“挑选”那些有价值的东西? (在我的数组示例中,只会获取前3个,name1,任何内容和代码)。

我试过

foreach ($test_arr as $test) {
  if (strlen($test >= 1)) {
    echo $test . "<br>";
  }
}

但它不起作用。没有“if”条件它可以工作,但是空数组值被考虑在内并且我不希望这样(因为我需要在每个值之后执行<br>并且我不想要{{1}如果没有价值)

对不起,如果我不能很好地解释自己,我希望你理解我的观点。我猜不应该太难......

感谢您的帮助!

7 个答案:

答案 0 :(得分:4)

也许会起作用

foreach ($test_arr as $test) {
  if (strlen($test)!=="") {
    echo $test . "<br>";
  }
}

您的解决方案具有更正的语法:

foreach ($test_arr as $test) {
  if (strlen($test)>=1) {
    echo $test . "<br>";
  }
}

答案 1 :(得分:1)

因为看起来你正在使用关联数组,所以你应该能够这样做:

foreach( $test_arr as $key => $value )
{
    if( $value != "" )
    {
        echo $value . "<br />";
    }
}

如图所示,您可以直接测试$value空字符串。由于这正是您要完成的测试,我希望这能完美地解决您的问题。

另一方面,这是非常直截了当的,如果您忘记了自己正在做的事情,将来应该是非常可维护的。

答案 2 :(得分:1)

由于空字符串是假的,你可以这样做(但你用if排除0):

foreach ($test_arr as $key => $val) {
  if ($val) {
    echo $val. "<br>";
  }
}

如果必须是空字符串,则(不包括0和FALSE):

foreach ($test_arr as $key => $val) {
  // the extra = means that this will only return true for strings.
  if ($val !== '' ) {
    echo $val. "<br>";
  }
}

答案 3 :(得分:1)

你最好使用这样的while循环:

while(list($test_key, $test_value) = each($test_arr))
{
    if($test_value != "") { echo $test_value . "<br/>"; }
}
reset($test_arr);

如果您的阵列变大,那么while会更快。即使在小型阵列上,我也注意到执行时间的巨大差异。

如果你真的不想要数组键。你可以这样做:

while(list(, $test_value) = each($test_arr))
{
    if($test_value != "") { echo $test_value . "<br/>"; }
}
reset($test_arr);

答案 4 :(得分:0)

您可以使用empty()检查值是否为空。

请注意,0false等值也会被视为empty,因此您可能需要检查字符串长度。

答案 5 :(得分:0)

只是一个简单的输入错误:

foreach ($test_arr as $test) {
  if (strlen($test) >= 1) {
    echo $test . "<br>";
  }
}

答案 6 :(得分:0)

试试这个:

     foreach ($test_arr as $test) {
          if (strlen($test) > 0) {
             echo $test . "<br>";
          } 
     }