Ограничение Массива По Регистру


Существует ли какой-либо тип функции выбора для создания нового массива, выбирающего только определенные элементы с подэлементами, соответствующими случаям? Например, я хотел бы иметь только массив, содержащий, где [тип] - "A", поэтому имейте конечный массив, содержащий только [1] и [2].

[1]  
    [type] => A
    [month] => January

[2]
    [type] => A
    [month] => February

[3]
    [type] => B
    [month] => March

Спасибо!

Author: Kevin Murphy, 2012-05-03

4 answers

function is_type_a($element) { return $element['type'] === 'A'; }
$fiteredArray = array_filter($inputArray, 'is_type_a');

Вы можете сделать это более лаконично с помощью анонимной функции, если у вас есть PHP 5.4.

 2
Author: Mark Reed, 2012-05-04 01:20:28

Вы могли бы просто уменьшить этот массив до нужных вам записей. Имейте в виду, что это сохранит исходные ключи, поэтому в итоге вы можете получить массив, содержащий 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

 1
Author: Sampson, 2012-05-04 02:02:46
function select_custom($array,$param)
{
    foreach($array as $k=>$v)
    {
       if($v['type']==$param)
       {
          $returnArray[] = $v; 
       }
    }
    return $returnArray;
}
 0
Author: Krishna Deepak, 2012-05-03 23:50:32

Вы можете использовать array_splice(), если вы знаете индексы элементов, которые хотите выбрать, если не так, как предлагалось в предыдущих ответах, вам нужно выполнить цикл

 0
Author: Reza S, 2012-05-04 01:48:46