Как заменить строки из двух разных многомерных массивов? - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь заменить строки из двух разных многомерных массивов, используя str_replace и категоризированные массивы.

Я пытался использовать array_walk_recursive дважды: один снаружи и один внутри, как вы можете видеть ниже

$array1 = [
    'key1' => [
        'first string'
    ],
    'key2' => [
        'second array'
    ]
];

$array2 = [
    'key1' => [
        'new string from second array'
    ],
    'key2' => [
        'second key in this other multidimensional array'
    ]
];

$outer_string = "Hello, this is my first string\nAnd here you can see another string from my second array";

echo array_walk_recursive($array1, function(&$e1, $i1) {
    return array_walk_recursive($array2, function(&$e2, $i2) {
        return str_replace($e1, $e2, $outer_string);
    });
});

Я ожидаю, что он будет перебирать каждый ключ из первого массива и заменять его значениями того же ключа во втором массиве.строка должна быть "Hello, this is my new string from second array\nAnd here you can see another string from my second key in this other multidimensional array"

1 Ответ

0 голосов
/ 28 января 2019

Довольно простым решением этой проблемы является итерация по двум массивам, построение массива пар замены (на основе сопоставления ключей между этими двумя массивами), а затем передача этого массива в strtr:

$replacements = array();
foreach ($array1 as $k => $v) {
    $replacements[$v[0]] = $array2[$k][0];
}
echo strtr($outer_string, $replacements);

Вывод:

Hello, this is my new string from second array
And here you can see another string from my second key in this other multidimensional array

Демонстрация на 3v4l.org

...