15

次のような配列 $output があります。

Array(
    [0] => Array(
        [0] => 1a
        [1] => 1b
        [2] => 1c
    )
    [1] => Array(
        [0] => 2a
        [1] => 2b
        [2] => 2c
    )
    [2] => Array(
        [0] => 3a
        [1] => 3b
        [2] => 3c
    )
    [3] => Array(
        [0] => 4a
        [1] => 4b
        [2] => 4c
    )
)

等々...

2番目の要素を削除したいときは、次を使用します:

$output = unset($output[1]);

以下を取得します。

Array(
    [0] => Array(
        [0] => 1a
        [1] => 1b
        [2] => 1c
    )
    [1] => Array(
        [0] => 3a
        [1] => 3b
        [2] => 3c
    )
    [2] => Array(
        [0] => 4a
        [1] => 4b
        [2] => 4c
    )
)

私の質問は、配列内のすべての要素 ([0][1]、[1][1]、[2][1]、[3][1]、...) のすべての要素の 2 つおきの要素を削除して取得する方法です。以下:

Array(
    [0] => Array(
        [0] => 1a
        [1] => 1c
    )
    [1] => Array(
        [0] => 2a
        [1] => 2c
    )
    [2] => Array(
        [0] => 3a
        [1] => 3c
    )
    [3] => Array(
        [0] => 4a
        [1] => 4c
    )
)
4

6 に答える 6

23

単純なコマンドでは実行できませんが、ループを使用できます。

foreach(array_keys($output) as $key) {
   unset($output[$key][1]);
}
于 2011-08-31T16:46:28.373 に答える
8

unset()配列と、各サブ配列で必要なものを反復処理できます。

foreach($output as &$item) {
    unset($item[2]);
}
unset($item); // unset reference
于 2011-08-31T16:46:00.793 に答える
7

清潔できちんと:

$f = function(&$a,$k) { unset($a[1]); };
array_walk($arr, $f);

または:

array_walk($arr, function (&$a, $k) {
  unset($a[1]); 
});
于 2011-08-31T16:53:06.387 に答える
2

と の組み合わせを使用しarray_mapますarray_splice

function removeSecond( array &$arr )
{
    array_splice( $arr, 1, 1 );
}
$out = array_map( 'removeSecond', $input );

問題unsetは、インデックスがそのままになることです。

$ php -r '$arr = array(array(0,1,2)); unset($arr[0][1]); var_dump($arr);'
array(1) {
  [0]=>
  array(2) {
    [0]=>
    int(0)
    [2]=>
    int(2)
  }
}

splice はインデックスを更新しますが、次のようになります。

$ php -r '$arr = array(array(0,1,2)); array_splice($arr[0], 1, 1); var_dump($arr);'
array(1) {
  [0]=>
  array(2) {
    [0]=>
    int(0)
    [1]=>
    int(2)
  }
}
于 2011-08-31T16:48:24.717 に答える
1
foreach($array as $key=>$val){ unset($val[1]); }
于 2011-08-31T16:47:43.750 に答える
0

私はこれを使用します:

public function array_unset_key_in_children($array, $keyToUnsetInChildren)
{ 
    $newArray = [];
    foreach($array as $key=>$subArray) { 
        unset($subArray[$keyToUnsetInChild]);
        $newArray[$key] = $subArray;
    }
    return $newArray;
}
于 2021-04-11T18:35:46.260 に答える