


Можно ли в функции, которая будет вызвана в array_map, обратиться к предыдущему и следующему элементу массива?
Задание звучит так: Перед вами переменная, содержащая строку. Напишите код, создающий массив, который будет состоять из строк, состоящих из предыдущего, текущего и следующего символа строки str. При написании данного кода, используйте array_map.
Пока что задание я реализовала тем, что функция возвращает массив return $arr1 = $astr--.$astr.$astr++; Но, понятное дело, таким образом оно не работает, но попытка была не пыткой :D
Полный код программы:
<?php
function get3($astr) {
return $arr1 = $astr--.$astr.$astr++;
}
$str2 = "Word map ball";
$str = str_replace(" ", '', $str2);
$stra = str_split($str);
// print_r($stra);
print_r(array_map('get3', $stra));
?>
Выводит:
(
[0] => WWW
[1] => ooo
[2] => rrr
[3] => ddd
[4] => mmm
[5] => aaa
[6] => ppp
[7] => bbb
[8] => aaa
[9] => lll
[10] => lll
)
А нужно что-то типо:
(
[0] => Wo
[1] => wor
[2] => ord
[3] => rdm
[4] => dma
[5] => map
[6] => apb
[7] => pba
[8] => bal
[9] => al
)
$result = array_slice(array_map(function ($c1, $c2, $c3) { return $c1 . $c2 . $c3; }, array_pad($stra, -count($stra) - 1, ''), $stra, array_slice($stra, 1)), 0, -1);
Лютый говнокод, но работает именно так, как надо, и именно через array_map.
Смысл в том, что мы склеиваем 3 массива:
первый - исходный, в начало которого добавлен элемент - пустая строка
второй - собственно исходный массив
третий - исходный массив, у которого удалён первый элемент
Никак, только полноценным циклом пробегаться по массиву