Фильтровать 2D-массив по значению конкретного ключа

Как я могу отфильтровать этот массив только для хранения элементов с помощью [category] => 1 ?

 [0] => Array ( [link] => index [image] => spot [category] => 0 ) [1] => Array ( [link] => test [image] => spotless [category] => 0 ) [2] => Array ( [link] => differentcat [image] => spotly [category] => 1 ) 

Используйте array_filter .

Вы хотите что-то вроде этого (предполагая, что хотите сохранить записи в category 1):

 function categoryone($var) { return (is_array($var) && $var['category'] == 1); } print_r(array_filter($your_array, "categoryone")); 

Вы можете использовать array_filter который проверяет значение категории в array_filter . http://php.net/manual/en/function.array-filter.php

Определите функцию фильтра следующим образом:

 function filter_function($var) { return is_array($var) && $var['category'] == 1; } 

… и затем используйте array_filter (), чтобы применить эту функцию к вашему массиву:

 $filtered_array = array_filter($my_array, 'filter_function'); 

Изменить: изменила функцию фильтрации, чтобы сохранить совпадающие значения, а не отбрасывать их.

@pathros:

Чтобы использовать другое значение для фильтрации, решение следующее: (TESTED :-))

 //Define your array $my_array = array( 0 => array( 'cat' => '1', 'value' => 'Value A' ) , 1 => array( 'cat' => '2', 'value' => 'Value B' ) , 2 => array( 'cat' => '0', 'value' => 'Value C' ) , 3 => array( 'cat' => '1', 'value' => 'Value D' ) ); //Define your filtering function function my_filtering_function($in_array) { return is_array($in_array) && $in_array['cat'] == $GLOBALS['filter_param_1']; } //TEST #1 : Set the desired value to 2 $GLOBALS['filter_param_1'] = 2; //Filter your array to only return items that match "cat=2" $filtered_array = array_filter($my_array, 'my_filtering_function'); e('Number of matching records : '.count($filtered_array)).'record(s)<br>'; //Will return "1 record(s)" (the second record of your array) //TEST #2 : Set the desired value to 1 $GLOBALS['filter_param_1'] = 1; //Filter your array to only return items that match "cat=1" $filtered_array = array_filter($my_array, 'my_filtering_function'); e('Number of matching records : '.count($filtered_array)).'record(s)<br>'; //Will return "2 record(s)" (the first and the last of your array)