【问题标题】:Extract line or column from PHP array从 PHP 数组中提取行或列
【发布时间】:2013-06-03 11:37:40
【问题描述】:

我有一个二维 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

它只适用于边缘元素(第一/最后一行,第一/最后一列)。 我想以某种方式使用 slice,但没有成功。

【问题讨论】:

标签: php arrays matrix


【解决方案1】:

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

在 PHP 5.5 上使用 array_column 提取列非常容易。对于早期版本,必须使用 array_maparray_walk 和 pop/shift 函数手动完成,依次在每一行上操作:

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 来概括这一点——但对于这些特定的操作,它会更慢。

【讨论】:

  • 认为您的意思可能是 echo array_pop($a);,因为 OP 想要回应削减的值。
  • 如果你能让它返回已删除的部分,就像 array_pop 等人那样,那会更好,我会想。
  • @IMSoP:完成并添加了一个实时示例。像你描述的那样工作。
  • 这是一个非常整洁的编码:)
  • @IMSoP:谢谢。我想我昨天制作了something neater,你可能会觉得很有趣。
【解决方案2】:

是的。获取第一行:

$arr[0];

获取最后一列:

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

【讨论】:

  • 我从来没有听说过array_column(),这并不奇怪,因为it's only introduced in PHP 5.5(仍然!)还不是正式的稳定版本。很高兴知道以供将来参考...
【解决方案3】:

部分。

可以使用 array_splice() 剪出一条线。

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

【讨论】:

    【解决方案4】:
    <?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;
    }
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2012-04-23
      • 1970-01-01
      • 2014-06-24
      • 2019-02-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多