从PHP数组中提取行或列

时间:2013-06-07 08:23:14

标签: php arrays matrix

我有一个二维PHP数组(矩阵)。

无论如何从这个矩阵中提取(回显或保存到另一个变量)一行或一列而不迭代这些元素?

假设我们有这个矩阵:

A A A B
A A A C
A B C D

我想做类似的事情:

display_and_cut_first_line()

//Matrix after this step:    
A A A C
A B C D

display_and_cut_last_column()
//Matrix after this step:
A A A
A B C

它只需要用于边缘元素(第一行/最后一行,第一列/最后一列)。 我想用某种方式使用切片,但没有设法做到这一点。

4 个答案:

答案 0 :(得分:6)

提取行很简单:array_pop(最后一行)和array_shift(第一行)为您执行此操作。

使用array_column在PHP 5.5上轻松提取列。对于早期版本,必须使用array_maparray_walk以及弹出/移位功能手动完成,依次对每行进行操作:

function extract_last_column(&$array) {
    $column = array();
    array_walk($array, function(&$row) use(&$column) {
        $column[] = array_pop($row);
    });
    return $column;
}

<强> See it in action

如果需要,您可以使用array_slice代替array_poparray_shift来概括这一点 - 但对于这些特定操作,它会更慢。

答案 1 :(得分:1)

<?php 
$example = array();
$example[0][0] = 'A';$example[0][1] = 'A';$example[0][2] = 'A';$example[0][3] = 'B';
$example[1][0] = 'A';$example[1][1] = 'A';$example[1][2] = 'A';$example[1][3] = 'C';
$example[2][0] = 'A';$example[2][1] = 'B';$example[2][2] = 'C';$example[2][3] = 'D';

$example = display_and_cut_first_line($example);
print_r($example);
/* Array
(
    [0] => Array
        (
            [0] => A
            [1] => A
            [2] => A
            [3] => C
        )

    [1] => Array
        (
            [0] => A
            [1] => B
            [2] => C
            [3] => D
        )

)
 */
$example = display_and_cut_last_column($example);
print_r($example);
/* Array
(
    [0] => Array
        (
            [0] => A
            [1] => A
            [2] => A
        )

    [1] => Array
        (
            [0] => A
            [1] => B
            [2] => C
        )

)
 */
function display_and_cut_first_line($array){
    array_shift($array);
    return ($array);
}

function display_and_cut_last_column($array){
    $result = array();
    foreach($array as $data):
        array_pop($data);
        $result[] = $data;
    endforeach;

    return $result;
}

?>

答案 2 :(得分:0)

是。要获得第一行:

$arr[0];

获取最后一栏:

$keys = array_keys($arr);
array_column($arr, end($keys));

答案 3 :(得分:-2)

晴。

可以使用array_splice()来剪切一行。

“列”在数组实现中不是可识别的条目,因此您必须至少迭代行,可能使用array_map()。