我对数组和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}如果没有价值)
对不起,如果我不能很好地解释自己,我希望你理解我的观点。我猜不应该太难......
感谢您的帮助!
答案 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()
检查值是否为空。
请注意,0
或false
等值也会被视为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>";
}
}