Ограничение Массива По Регистру
Существует ли какой-либо тип функции выбора для создания нового массива, выбирающего только определенные элементы с подэлементами, соответствующими случаям? Например, я хотел бы иметь только массив, содержащий, где [тип] - "A", поэтому имейте конечный массив, содержащий только [1] и [2].
[1]
[type] => A
[month] => January
[2]
[type] => A
[month] => February
[3]
[type] => B
[month] => March
Спасибо!
4 answers
function is_type_a($element) { return $element['type'] === 'A'; }
$fiteredArray = array_filter($inputArray, 'is_type_a');
Вы можете сделать это более лаконично с помощью анонимной функции, если у вас есть PHP 5.4.
Вы могли бы просто уменьшить этот массив до нужных вам записей. Имейте в виду, что это сохранит исходные ключи, поэтому в итоге вы можете получить массив, содержащий 0, 1 и 3 в качестве ключей, если 2 не было установлено во время процесса.
foreach( $array as $key => &$value ){
if ( $value['type'] != 'A' )
unset( $array[ $key ] );
}
Демонстрация: http://codepad.org/OG5rguJ8
Другой метод заключается в использовании array_filter
для итеративного уменьшения массива по одной записи за раз:
function callbackFunc( $val ) {
return $val['type'] == 'A';
}
$result = array_filter( $array, callbackFunc );
Мы вызываем метод array_filter
, передающий массив, который мы хотели бы отфильтровать, а также фильтрацию функция, которую мы создали. Наша функция будет выполняться для каждого элемента в массиве, обрабатывая текущий элемент как переменную $val
.
Если ключ типа этой переменной соответствует значению, которое ==
равно "A", возвращается TRUE
. В противном случае возвращается FALSE
. Когда функция возвращает TRUE
, вычисленное значение отправляется в массив $result
. Если было возвращено FALSE
, значение не помещается в массив $result
.
Как и в предыдущем варианте, этот метод также сохранит ключ ценности.
Демонстрация: http://codepad.org/todHBZo7
function select_custom($array,$param)
{
foreach($array as $k=>$v)
{
if($v['type']==$param)
{
$returnArray[] = $v;
}
}
return $returnArray;
}
Вы можете использовать array_splice(), если вы знаете индексы элементов, которые хотите выбрать, если не так, как предлагалось в предыдущих ответах, вам нужно выполнить цикл