2

二次元 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

4 に答える 4

6

行の抽出は簡単です: array_pop(最後の行) とarray_shift(最初の行) がこれを行います。

PHP 5.5 では、列の抽出は非常に簡単array_columnです。以前のバージョンでは、array_maporarray_walkおよび pop/shift 関数を手動で使用して、各行を順番に操作する必要がありました。

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

実際に見てください

必要に応じて、 andarray_sliceの代わりに使用してこれを一般化できますが、これらの特定の操作では速度が低下します。array_poparray_shift

于 2013-06-07T08:27:15.997 に答える
0

はい。最初の行を取得するには:

$arr[0];

最後の列を取得するには:

$keys = array_keys($arr);
array_column($arr, end($keys));
于 2013-06-07T08:28:24.827 に答える
0
<?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;
}

?>
于 2013-06-07T08:49:06.327 に答える
-2

部分的に。

array_splice() を使用して、行を切り取ることができます。

「列」は、配列の実装では認識可能なエントリではないため、おそらく array_map() を使用して、少なくとも行を反復する必要があります。

于 2013-06-07T08:30:33.640 に答える