filter array by key

2019-08-20 17:08发布

问题:

I have this little function to filter my array by keys:

 private function filterMyArray( )
 {
      function check( $v )
      {
           return $v['type'] == 'video';
      }
      return array_filter( $array, 'check' );
 }

This works great but since I have more keys to filter, I was thinking in a way to pass a variable from the main function: filterMyArray($key_to_serch) without success, also I've tried a global variable, but seems not work.

Due some confusion in my question :), I need something like this:

 private function filterMyArray( $key_to_serch )
 {
      function check( $v )
      {
           return $v['type'] == $key_to_serch;
      }
      return array_filter( $array, 'check' );
 }

Any idea to pass that variable?

回答1:

This is where anonymous functions in PHP 5.3 come in handy (note the use of use):

private function filterMyArray($key)
{
     return array_filter(
         $array,
         function check($v) use($key) {
             return $v['type'] == $key;
         }
     );
}


回答2:

private function filterMyArray($key_to_search) {
  function check( $v ) {
       return $v[$key_to_search] == 'video';
  }
  return array_filter( $array, 'check' );
}

should work because the inner function has access to the variables in the outer function



回答3:

You need to use the use keyword to get the variable in scope, c.f. this example in php's doc.



回答4:

Here's a PHP < 5.3 version using create_function.

private function filterMyArray( $key)
{
      $fn = create_function( '$v', "return $v[$key] == 'video';");
      return array_filter( $array, $fn);
}