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);

22
demandé sur Shaz 2011-06-03 15:34:58

4 réponses

il n'y a pas besoin de array_map. De la docs : "si le sujet est un tableau, alors la recherche et le remplacement est effectué avec chaque entrée du sujet, et la valeur de retour est un tableau aussi bien."

49
répondu chiborg 2011-06-03 11:47:59

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
)
10
répondu binaryLV 2011-06-03 11:38:34

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);
5
répondu salathe 2017-05-23 11:54:19

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;
}
1
répondu J. Scott Elblein 2012-09-19 20:31:37