PHP Array foreach вопрос - PullRequest
       4

PHP Array foreach вопрос

1 голос
/ 15 июля 2011

У меня вопрос о массивах и 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>";
  }
}

но это не работает. Без условия «если» это работает, но учитываются пустые значения массива, и я не хочу этого (потому что мне нужно сделать <br> после каждого значения, и я не хочу <br>, если без значения)

Извините, если я не очень хорошо объясняю себя, надеюсь, вы понимаете мою мысль. Не должно быть слишком сложно, я думаю ..

Спасибо за вашу помощь!

Ответы [ 7 ]

4 голосов
/ 15 июля 2011

Возможно будет работать

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

Ваше решение с исправленным синтаксисом:

foreach ($test_arr as $test) {
  if (strlen($test)>=1) {
    echo $test . "<br>";
  }
}
1 голос
/ 15 июля 2011

Вам лучше использовать цикл while, например так:

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

Если ваш массив станет большим, то время будет намного быстрее.Даже на небольших массивах я заметил большую разницу во времени выполнения.

И если вам действительно не нужен ключ массива.Вы можете просто сделать это:

while(list(, $test_value) = each($test_arr))
{
    if($test_value != "") { echo $test_value . "<br/>"; }
}
reset($test_arr);
1 голос
/ 15 июля 2011

Поскольку пустые строки являются ложными, вы можете просто сделать это (но вы исключите 0 с помощью if):

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>";
  }
}
1 голос
/ 15 июля 2011

Поскольку похоже, что вы используете ассоциативный массив, вы должны быть в состоянии сделать это:

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

Как показано, вы можете непосредственно проверить $value на наличие пустой строки.Поскольку это именно тот тест, который вы пытаетесь выполнить, я надеюсь, что это решит вашу проблему идеально.

С другой стороны, это довольно просто и должно быть очень удобным в будущем, когда выточно забыл, что ты делал!

0 голосов
/ 15 июля 2011

Попробуйте это:

     foreach ($test_arr as $test) {
          if (strlen($test) > 0) {
             echo $test . "<br>";
          } 
     }
0 голосов
/ 15 июля 2011

просто простая ошибка ввода:

foreach ($test_arr as $test) {
  if (strlen($test) >= 1) {
    echo $test . "<br>";
  }
}
0 голосов
/ 15 июля 2011

Вы можете проверить значение emtpy с помощью empty().

Обратите внимание, что такие значения, как 0 или false также считаются empty, поэтому вам, возможно, придется проверить длину строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...