tableau map avec str remplacer
est-il possible d'utiliser array_map
en conjonction avec str_replace
sans appeler une autre fonction pour faire le str_replace
?
par exemple:
array_map(str_replace(' ', '-', XXXXX), $myArr);
4 réponses
non, ce n'est pas possible. Cependant, si vous utilisez PHP 5.3, vous pouvez faire quelque chose comme ceci:
$data = array('foo bar baz');
$data = array_map(function($value) { return str_replace('bar', 'xxx', $value); }, $data);
print_r($data);
sortie:
Array
(
[0] => foo xxx baz
)
bien sûr que c'est possible, vous avez juste à donner array_map()
la bonne entrée pour la fonction de rappel.
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)
);
mais pour l'exemple particulier dans la question, comme chiborg dit, il n'est pas nécessaire. str_replace()
travaillera avec plaisir sur un tableau de cordes.
str_replace(' ', '-', $myArr);
pourrait être important de noter que si le tableau utilisé dans str_replace est multidimensionnel, str_replace ne fonctionnera pas.
bien que cela ne réponde pas directement à la question de l'utilisation de array_map en appelant une fonction supplémentaire, cette fonction peut encore être utile à la place de "str_replace" dans le premier paramétreur de array_map si vous décidez que vous devez utiliser array_map et remplacement de chaîne sur les tableaux multidimensionnels. Il se comporte de la même façon que l'utilisation de 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;
}