【问题标题】:Filter array by prefix - what was that function's name?按前缀过滤数组 - 该函数的名称是什么?
【发布时间】:2011-01-25 05:38:31
【问题描述】:

假设我有一个包含以下成员的数组:

car_porsche
car_mercedes
car_toyota
motorcycle_suzuki
motorcycle_honda
motorcycle_motoguzzi

如何获得所有以car_ 开头的元素的数组?有一个本机功能,但我忘记了它的名字。

你知道我指的是哪个函数吗?我知道如何使用 for/foreach/array_filter 来做到这一点。我很确定确实有这个功能。

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    PHP 8 (2021):

    我为此使用str_starts_with

    执行区分大小写的检查,指示 haystack 是否以 needle 开头。

    → Documentation

    str_starts_with("car_porsche", "car_");
    

    【讨论】:

      【解决方案2】:

      Regexp 需要更多时间来处理,在这种情况下最好使用 strpos():

      foreach($arr AS $key => $val)
      if(strpos(" ".$val, "car_") == 1)     
          $cars[$key] = $val;
      

      这也适用于键:

      【讨论】:

        【解决方案3】:

        您可以编写一个简单的例程,让您可以选择在返回的数组中删除前缀:

        function filter_by_key_prefix ( $arr, $prefix, $drop_prefix=false ) {
                $params = array();
                foreach( $arr as $k=>$v ) {
                    if ( strpos( $k, $prefix ) === 0 ) {
                        if ( $drop_prefix ) {
                            $k = substr( $k, strlen( $prefix ) );
                        }
                        $params[ $k ] = $v;
                    }
                }
                return $params;
            }
        

        【讨论】:

          【解决方案4】:

          我认为您可以为此目的使用array_filter()

          【讨论】:

            【解决方案5】:

            好吧,你可以使用preg_grep()

            $output = preg_grep('!^car_!', $array);
            

            您也可以使用array_filter(),但您必须向其中传递一个测试函数。

            【讨论】:

              猜你喜欢
              • 2021-12-11
              • 1970-01-01
              • 2019-03-03
              • 2018-05-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多