【问题标题】:Make filter array from empty value and array that contain only one word从空值和仅包含一个单词的数组制作过滤器数组
【发布时间】:2012-11-23 03:43:21
【问题描述】:

我想删除数组中的空值并删除只包含一个单词的值。

这是我的代码:

$all = "smart lion, smart duck, small ant, , pig";
$allkey = explode (',',$all);
$allkey = array_unique($allkey);
for ($i = 0; $i < (count($allkey)); $i++)
{
    if (str_word_count($allkey[$i]) < 2)
    {
        unset($allkey[$i]);
    }
    else
    {
        echo $allkey[$i]."<br />";
    }
}

我想删除空值和单词“pig”, 帮助我使此代码正常工作。 谢谢。

【问题讨论】:

  • 当我运行你的代码时,我得到 smart lion&lt;br /&gt;smart duck&lt;br /&gt;small ant&lt;br /&gt; 看起来它对我来说工作正常

标签: php arrays unset


【解决方案1】:
<?php

$all = "smart lion, smart duck, small ant, , pig";
$allkey = explode (',',$all);
$allkey = array_unique($allkey);

$allkey = array_map( 'trim', $allkey );
$allkey = array_filter( $allkey );

var_dump( $allkey );

array_map 遍历您的数组并执行 trim 函数,该函数将删除开头和结尾的空格。 array_filter 删除空值作为评估为假。

其他方式:

<?php   
$all = "smart lion, smart duck, small ant, , pig";
$allkey = explode (',',$all);
$allkey = array_unique($allkey);

foreach( $allkey as $key => $entry ) {
 $entry = trim( $entry );

 if( empty($entry) ) {
   unset( $allkey[$key] );
 }
}

var_dump( $allkey );

【讨论】:

    【解决方案2】:

    有代码

    $all = "smart lion, smart duck, small ant, , pig, pelican";
    $allkey = explode (',',$all);
    $allkey = array_unique($allkey);
    for ($i = 0; $i < (count($allkey)); $i++)
    {
        //we count the number of words
        $allwords = explode (' ',$allkey[$i]);
        //Remove empty words
        for ($j = 0; $j < (count($allwords)); $j++) {
            if ($allwords[$j]=="") unset($allwords[$j]);
        }
        if (count($allwords)<2)
            unset($allkey[$i]);
        else
            echo trim($allkey[$i])."\n";
    }
    

    http://codepad.org/j6B2eEEX

    【讨论】:

      【解决方案3】:

      首先,我会在循环中 trim() 喜欢

      for ($i = 0; $i < (count($allkey)); $i++)
      {
          $elem = trim($allkey[$i]);
      }
      

      其次,要跳过少于两个单词的值,我会将其写入单独的数组。所以在for(...)循环之前添加:

      $foundelems = array();
      

      然后在for(...) 循环内,执行if

      if(str_word_count($elem) >= 2) {
          $foundelems[] = $elem;
      }
      

      并且您在$foundelems 数组中有正确的项目。一起来:

      $all = "smart lion, smart duck, small ant, , pig";
      $allkey = explode (',',$all);
      $allkey = array_unique($allkey);
      $foundelems = array();
      for ($i = 0; $i < (count($allkey)); $i++)
      {
          $elem = trim($allkey[$i]);
          if(str_word_count($elem) >= 2) {
              $foundelems[] = $elem;
          }
      }
      

      【讨论】:

        【解决方案4】:

        您可以通过自定义回调函数一次调用array_filter 来实现您想要的:

        $all = "smart lion, smart duck, small ant, , pig";
        // get array of unique, trimmed elements
        $exploded = array_unique(array_map('trim', explode(',', $all)));
        $allkey = array_filter($exploded, function($el) {
          $val = trim($el);
          // return false if empty or only one word, which will remove the element from the array
          return (!empty($val) && str_word_count($val) >= 2);
        });
        

        【讨论】:

          【解决方案5】:

          你可以这样做:

          $arr = explode(',',"smart lion, smart duck, small ant, , pig");
          foreach($arr as $ky => $val) {
              if (strpos(trim($val),' ') === false) {
                      unset($arr[$ky]);
                  }
          }
          var_dump($arr);
          

          以上回声:

          array(3) { [0]=> string(10) "智能狮子" [1]=> string(11) "智能 鸭子" [2]=> 字符串(10) "小蚂蚁" }

          【讨论】:

            猜你喜欢
            • 2019-06-16
            • 2022-11-28
            • 2021-03-17
            • 1970-01-01
            • 2020-03-02
            • 2017-04-22
            • 2018-02-28
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多