Ответ 1
Невозможно выполнить простую команду, но вы можете использовать цикл:
foreach(array_keys($output) as $key) {
unset($output[$key][1]);
}
У меня есть этот массив $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]);
}
Вы можете выполнить итерацию по массиву и unset()
, что вы хотите в каждом поддиапазоне:
foreach($output as &$item) {
unset($item[2]);
}
unset($item); // unset reference
foreach($array as $key=>$val){ unset($val[1]); }
Вы использовали комбинацию 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)); array_splice($arr[0], 1, 1); var_dump($arr);'
array(1) {
[0]=>
array(2) {
[0]=>
int(0)
[1]=>
int(2)
}
}
Чистая и аккуратная:
$f=function(&$a,$k) { unset $a[1]; };
array_walk($arr,$f);