【问题标题】:create_function in php [duplicate]php中的create_function [重复]
【发布时间】:2011-11-23 11:24:30
【问题描述】:

可能重复:
Is there a PHP function to remove any/all key/value pairs that have a certain value from an array?
Remove zero values from a PHP array

我有一个这样的数组。

[notify_emp] => Array
  (
      [224] => 0
      [228] => 0
      [232] => 1
      [250] => 1
      [350] => 1
  )

我只想要数组中值设置为 1 并且需要删除值为 0 的键的那些键。 如何在 php 中使用 create_function 执行此操作?还是有其他方法可以执行该操作?

【问题讨论】:

  • 我不明白你为什么要在这里使用create_function

标签: php create-function


【解决方案1】:
$array = array_filter($array, create_function('$val', 'return (bool) $val;'));

...或者对于 PHP >= 5.3:

$array = array_filter($array, function ($val) {
  return (bool) $val;
});

...或者简单地说(正如@outis 正确指出的那样)你可以简单地

$array = array_filter($array);

...或者你可以:

foreach ($array as $k => $v) {
  if (!$v) unset($array[$k]);
}

任你选。

但是,我猜你想要的是带有“on”标志的项目列表,所以这可能是一个更好的方法:

$flaggedAsOn = array_keys($array,'1');

【讨论】:

    【解决方案2】:

    试试这个:

    <?php
    function hasOne($var)
    {
        // returns whether the input has 1
        return($var == 1);
    }
    
    
    $arr= array("224"=>1, "228"=>0, "250" => 1);
    
    print_r(array_filter($arr, "hasOne"));
    ?>
    

    结果:

    Array ( [224] => 1 [250] => 1 ) 
    

    【讨论】:

    • 请注意,array_filter 在这种情况下不需要回调;它默认在转换为布尔值时过滤掉所有值等于FALSE 的项目。
    • 你是对的,在这篇文章之后,我做了更多的研究,你需要的只是array_filter($arr)
    【解决方案3】:

    如果您使用的是 PHP 5.3,那么使用带有匿名函数的 array_filter 就不会那么麻烦了。

    如果您使用的是 5.3 之前的 PHP 版本,那么与使用 create_function() 相比,仅使用 array_filter 实现一个用作回调的函数就不会那么麻烦了。

    【讨论】:

      【解决方案4】:
      remove_unwanted ($array) {
      
         foreach ($array as $key => $value) {
      
            if ($array[$key] == '0') { unset($array[$key]) }
      
         }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2018-11-02
        • 1970-01-01
        • 2011-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多