de recherche et de remplacer la valeur dans le tableau PHP

J'ai été à la recherche pour certains standard fonction PHP pour remplacer une partie de la valeur d'un tableau avec d'autres, mais, étonnamment, je n'ai pas trouvé, donc je dois écrire mon propre:

function array_replace_value(&$ar, $value, $replacement)
{
    if (($key = array_search($ar, $value)) !== FALSE) {
        $ar[$key] = $replacement;
    }
}

Mais je me demande encore - pour une chose facile, il doit être déjà une fonction pour que cela! Ou peut-être beaucoup plus simple que celui inventé par moi?

Notez que cette fonction ne fera qu'un seul remplacement. Je suis à la recherche de solutions existantes, de même que remplacer une occurrence unique, ainsi que celles qui remplace toutes les occurrences.

  • Notez que les tableaux sont passés par valeur. Vous aurez besoin soit de retour le nouveau tableau à partir de la fonction (correspondant au comportement du reste de la array_* fonctions) ou faire array_replace_value prendre $ar par référence.
  • str_replace() prend des tableaux, mais vous ne pouvez pas vous limiter à un seul remplacement.
  • Merci @outis, j'ai réalisé moi-même au cours de débogage dans le temps 🙂
  • lorsque vous remarque la fonction effectue un remplacement, vous signalant un défaut ou en notant le comportement souhaité?
  • en fait, à la fois 🙂 Maintenant, il est souhaitée, mais pour un autre l'utilise peut devenir un défaut 🙂
  • str_replace effectue également des sous-chaîne de remplacement, où Tomas fonction ne remplace les correspondances exactes.
  • selon ce que vous êtes en utilisant les tableaux de chaîne pour, peut-être plus logique (et plus efficace) à utiliser les chaînes de caractères comme des indices plutôt que de valeurs. Par exemple, les ensembles de chaînes sont mieux mises en œuvre de cette façon.
  • non, parce que l'ordre des chaînes est important, il est naturel pour l'avoir comme valeurs, comme array('apple', 'coconut', 'banana').
  • éléments de tableau de préserver l'ordre d'insertion, si c'est ce que vous parlez. uksort tour d'autres ordres à une insertion de la commande; arbitraire des ordonnancements peuvent être pris en charge par l'aide d'un tableau de string=>index (qui pourrait être le même que le tableau à trier), l'envers du tableau que vous avez actuellement, bien que la mise à jour de la commande tableau devient cher.
  • fonction array_replace_value(array $sujet, $recherche, $replace) { if (($key = array_search($objet, $recherche)) !== false) { $objet[$key] = $remplacer; } return $sujet; } Pas plus courte de la fonction ou quelque chose comme cela, mais la mise à jour de la fonction qui correspond à l'autre php array_* les fonctions et le paramètre de nommage aussi le str_replace par exemple. Mais vous fonction est très pratique pour moi et je ne pense pas qu'il existe un plus court chemin.
  • peut-être vous apporter une réponse, le code en commentaire n'a pas l'air sympa 🙂
  • Je sais, mais c'est pas vraiment de réponse, parce que c'est presque le même code que dans la question. Mais je peux si vous le souhaitez. 😉

InformationsquelleAutor TMS | 2011-12-29