Как я могу отфильтровать этот массив только для хранения элементов с помощью [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)