【问题标题】:Replace all items by condition in php array [duplicate]按条件替换php数组中的所有项目[重复]
【发布时间】:2018-01-11 10:24:33
【问题描述】:

我有一个像这样的 php 数组:

$arr = [-1, 15, 6, 44, 9292, -2, -776, -6];

实际上任何带有负值的数组。

现在我想将所有负值更改为另一个值,比如说 0。 结果我想得到这个:

$res = [0, 15, 6, 44, 9292, 0, 0, 0];

我怎样才能做到这一点?

谢谢。

【问题讨论】:

    标签: php arrays numbers


    【解决方案1】:

    你可以检查这个库

    https://github.com/apollonin/numphp

    并使用命令

    $arr[$arr->lt(0)] = 0;

    【讨论】:

    • 哇,这很有趣。 array_map,正如所有建议的那样,老实说,看起来很丑。我会检查这个
    • @JanetDou 第一次听说array_walk() 看起来很丑。为这样简单的任务使用额外的库并不是一个好主意。
    【解决方案2】:

    您可以使用array_walk 函数来解析数组值:

    <?php
    
    $arr = [-1, 15, 6, 44, 9292, -2, -776, -6];
    $newArr = [];
    array_walk($arr, function ($item, $key) use (&$newArr) {
        $newArr[$key] = $item >= 0 ? $item : 0;
    });
    
    print_r($newArr);
    

    【讨论】:

      【解决方案3】:
      for($i = 0; $i < count($arr); $i++){
          if ($arr[$i] < 0)
             $arr[$i] = 0;
      }
      

      【讨论】:

      • 您可能想详细说明为什么这可以解决问题
      【解决方案4】:

      你可以使用array_map

      $arr = [-1, 15, 6, 44, 9292, -2, -776, -6];
      
      function neg($a){
      
          return ($a > 0 ) ? $a : 0;
      
      }
      
      print_r(array_map("neg",$arr));
      

      【讨论】:

        【解决方案5】:

        你可以使用array_walk函数:

        $arr = [-1, 15, 6, 44, 9292, -2, -776, -6];
        array_walk($arr, function(&$v, $k) {
            $v = ($v <0) ? 0 : $v;
        });
        

        【讨论】:

          【解决方案6】:

          Array_walk 很棒,但 foreach 更快更容易理解

          $arr = [-1, 15, 6, 44, 9292, -2, -776, -6];
          
          foreach($arr as $key => $value){
              echo $value < 0 ? 0 : $value;
          }
          

          【讨论】:

            猜你喜欢
            • 2011-06-30
            • 1970-01-01
            • 2020-09-29
            • 1970-01-01
            • 2017-04-17
            • 2014-09-28
            • 1970-01-01
            • 1970-01-01
            • 2018-09-09
            相关资源
            最近更新 更多