PHP – не задан в многомерном массиве

У меня есть этот массив $ 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 ) ) 

и так далее…

Когда я хочу удалить второй элемент, я просто использую

 $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], …), чтобы получить следующие:

 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 ) ) 

    Невозможно выполнить простую команду, но вы можете использовать цикл:

     foreach(array_keys($output) as $key) { unset($output[$key][1]); } с foreach(array_keys($output) as $key) { unset($output[$key][1]); } 

    Вы можете выполнять итерацию по массиву и unset() что вы хотите в каждом поддиапазоне:

     foreach($output as &$item) { unset($item[2]); } unset($item); // unset reference с foreach($output as &$item) { unset($item[2]); } unset($item); // unset reference 

    Вы бы использовали комбинацию 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) } } с $ 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) } } 

    Пока сплайс обновит индексы:

     $ 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) } } 
     foreach($array as $key=>$val){ unset($val[1]); } 

    Чистота и аккуратность:

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