Я создал массив hashmap в PHP и использовал array_map для печати результата.
<?php
$rule =
[
"c" => "d",
"a" => "o",
"t" => "g",
"h" => "a",
"1" => "@",
"e" => "n",
"n" => "t"
];
echo join('', array_map(function($x) use($rule) { return $rule[$x]; },
str_split('cat1hen')));
?>
Он отображает вывод как «dog @ ant». Но я хочу другой вывод. Каждый раз, когда ожидается вывод в виде «@», Я хочу поменять "@", чтобы поменять его значение следующим элементом массива.
Это означает, что вывод должен быть "doga @ nt" вместо "dog @ ant". Здесь позиция @ поменялась местами со следующимэлемент массива т.е. "а".Позиция должна меняться только тогда, когда ожидаемый результат равен «@».
Я уже сделал это в javascript:
var rule = {
"c": "d",
"a": "o",
"t": "g",
"h": "a",
"1": "@",
"e": "n",
"n": "t"
}
function convert(str) {
let strArr = [...str];
return strArr.map((d, i, arr) => {
if (rule[d] == '@') {
return rule[arr[i + 1]];
} else if (rule[arr[i - 1]] == '@') {
return '@';
}
return rule[d];
}).join('')
}
console.log(convert("cat1hen"))
Но я хочу использовать эту логику и в PHP.сделал array_map для отображения элемента в приведенном выше PHP-коде, но если еще часть меня смутила. Как это сделать в php и напечатать 'doga@nt'.