【问题标题】:Remove multiple values from array从数组中删除多个值
【发布时间】:2019-01-27 08:50:12
【问题描述】:

我有以下数组:

array(5) { 
    ["destino"]=> string(11) "op_list_gen" 
    ["id_terminal"]=> string(0) "" 
    ["marca"]=> string(2) "--" 
    ["tipo"]=> string(2) "--" 
    ["lyr_content"]=> string(14) "aawaw"
}

如何从数组中删除值 "--"empty 值?

我尝试使用 foreach 并删除未设置的元素,但它不起作用。

foreach ($array as $key => $arra) {
        if(array_key_exists('--', $array)){ 
            unset($arra[$key]);
        }
}

【问题讨论】:

标签: php arrays foreach unset


【解决方案1】:
$array = [
    "destino" => "op_list_gen",
    "id_terminal" => "",
    "marca" => "--",
    "tipo" => "--",
    "lyr_content" => "aawaw"
];

$new_array = array_filter($array, function($item){
    if($item != '--' || $item != '')
        return $item;
})

var_dump($new_array) 

array_filter() 将获取每个条目并在它不是 --'' 时返回它

【讨论】:

  • array_filter() 中的回调通常返回 true/false 以保留或删除项目。
【解决方案2】:

使用array_filter:

$original = [
    'destino' => 'op_list_get',
    'id_terminal' => '',
    'marca' => '--',
    'tipo' => '--',
    'lyr_content' => 'aawaw',
];

// values you want to filter away
$disallowArray = ['', '--'];
$filteredResult = array_filter($original, function($val) use($disallowArray) {
    // check that the value is not in our disallowArray
    return \in_array($val, $disallowArray, true) === false;
});

结果:

Array
(
    [destino] => op_list_get
    [lyr_content] => aawaw
)

【讨论】:

    【解决方案3】:

    您可以通过简单地循环数组来删除值,在此过程中创建一个新数组:

    $myarray = array( 
      "destino" => "op_list_gen",
      "id_terminal" => "",
      "marca" => "--", 
      "tipo" => "--", 
      "lyr_content" => "aawaw",
    }
    
    $newarray = array();
    foreach($myarray as $key => $value) {
        if($value != "--" && $value != "") {
            $newarray[$key] = $value;
      }
    }
    

    或者,更优雅的是,您可以使用array_filter 函数。它需要一个回调函数,对于每个值,该函数决定是否包含它。这也返回了一个新数组:

    $newarray = array_filter($myarray, function($elem) {
        if($elem != "" && $elem != "--") return $elem;
    });
    

    【讨论】:

      【解决方案4】:

      你可以使用array_filter来解决这个问题:

      $arr = [
          "destino" => "op_list_gen",
          "id_terminal" => "",
          "marca" => "--",
          "tipo" => "--",
          "lyr_content" => "aawaw"
      ];
      
      $newArr = array_filter($arr, function($value) {
          return !in_array($value, ['', '--']);
      });
      

      演示: https://ideone.com/oot7lZ

      【讨论】:

        【解决方案5】:

        通用方法应该如下所示:

        $filter = function(...$excluded) {
             return function ($value) use ($excluded) {
                return !in_array($value, $excluded);
          };
        };
        
        $newArray = array_filter($array, $filter('', '--'));
        

        这种方法是可重复使用的,因为您无需对值进行硬编码即可正确了解您的过滤功能。

        【讨论】:

          【解决方案6】:

          正如所有其他答案所说,array_filter 是解决此问题的好方法。但是,这将返回一个新数组,实际上并没有修改原始数组。如果这就是您正在寻找的,这可能是一种不同的方法:

          // Start infinite loop
          while(true){
              // Check for value in array
              if (($key = array_search('--', $arr)) !== false || ($key = array_search('', $arr)) !== false) {
                  // Unset the key
                  unset($arr[$key]);
                  // Reset array keys
                  $arr = array_values($arr);
              } else {
                  // No more matches found, break the loop
                  break;
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2014-11-17
            • 2018-05-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-01-13
            • 1970-01-01
            • 2017-06-23
            • 1970-01-01
            相关资源
            最近更新 更多