noganno
9/2/2013 - 5:53 PM

аналог array_column URL: http://habrahabr.ru/post/173943/ Формат вызова: (array) array_column(array $input, mixed $columnKey[, mixed $inde

аналог array_column URL: http://habrahabr.ru/post/173943/

Формат вызова:

(array) array_column(array $input, mixed $columnKey[, mixed $indexKey]);

Здесь $input — исходный [N>1]-мерный массив, из которого производится выборка, а $columnKey — индекс столбца, по которому она делается. Если будет указан параметр $indexKey, результат будет дополнительно проиндексирован по указанному в нем столбцу.

function array_column ($input, $columnKey, $indexKey = null) {
    if (!is_array($input)) {
        return false;
    }
    if ($indexKey === null) {
        foreach ($input as $i => &$in) {
            if (is_array($in) && isset($in[$columnKey])) {
                $in    = $in[$columnKey];
            } else {
                unset($input[$i]);
            }
        }
    } else {
        $result    = array();
        foreach ($input as $i => $in) {
            if (is_array($in) && isset($in[$columnKey])) {
                if (isset($in[$indexKey])) {
                    $result[$in[$indexKey]]    = $in[$columnKey];
                } else {
                    $result[]    = $in[$columnKey];
                }
                unset($input[$i]);
            }
        }
        $input    = &$result;
    }
    return $input;
}
 
 
 
$records = array(
    array(
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe'
    ),
    array(
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith'
    ),
    array(
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones'
    ),
    array(
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe'
    )
);
 
$firstNames = array_column($records, 'first_name');
print_r($firstNames);
 
 
Array
(
    [0] => John
    [1] => Sally
    [2] => Jane
    [3] => Peter
)
 
$lastNames = array_column($records, 'last_name', 'id');
print_r($lastNames);
 
Array
(
    [2135] => Doe
    [3245] => Smith
    [5342] => Jones
    [5623] => Doe
)