Массив массивов с str_replace

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

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

4 ответа

Решение

Там нет необходимости для array_map. Из документов: "Если тема - это массив, то поиск и замена выполняются для каждой записи темы, а возвращаемое значение также является массивом".

Нет, это невозможно. Хотя, если вы используете 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
)

Конечно, это возможно, вы просто должны дать 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)
);

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

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

Может быть важно отметить, что если массив, используемый в 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;
}
Другие вопросы по тегам