Подтвердить что ты не робот

Array_map с str_replace

Можно ли использовать array_map в сочетании с str_replace без вызова другой функции для выполнения str_replace?

Например:
array_map(str_replace(' ', '-', XXXXX), $myArr);

4b9b3361

Ответ 1

Нет необходимости в array_map. Из docs: "Если объектом является массив, то поиск и замена выполняются с каждой записью объекта, а возвращаемое значение представляет собой массив также."

Ответ 2

Нет, это невозможно. Хотя, если вы используете PHP 5.3, вы можете сделать что-то вроде этого:

$data = array('foo bar baz');
$data = array_map(function($value) { return str_replace('bar', 'xxx', $value); }, $data);
print_r($data);

Вывод:

Array
(
    [0] => foo xxx baz
)

Ответ 3

Уверен, что вам просто нужно дать array_map() правильный ввод для функции обратного вызова.

array_map(
    'str_replace',            // callback function (str_replace)
    array_fill(0, $num, ' '), // first argument    ($search)
    array_fill(0, $num, '-'), // second argument   ($replace)
    $myArr                    // third argument    ($subject)
);

Но для конкретного примера в вопросе, как сказал chiborg, нет необходимости. str_replace() будет радостно работать с массивом строк.

str_replace(' ', '-', $myArr);

Ответ 4

Может быть важно отметить, что если массив, используемый в str_replace, является многомерным, str_replace не будет работать.

Хотя это не дает прямого ответа на вопрос об использовании array_map без вызова дополнительной функции, эта функция все еще может быть полезна вместо str_replace в первом параметре array_map, если вы решите, что вам нужно использовать array_map и замена строк на многомерных массивах. Он ведет себя так же, как при использовании str_replace:

function md_str_replace($find, $replace, $array) {
/* Same result as using str_replace on an array, but does so recursively for multi-dimensional arrays */

if (!is_array($array)) {
  /* Used ireplace so that searches can be case insensitive */
  return str_ireplace($find, $replace, $array);
}

$newArray = array();

foreach ($array as $key => $value) {
  $newArray[$key] = md_str_replace($find, $replace, $value);
}

return $newArray;
}