Modifier la valeur d’une ligne d’un tableau si l’une de ses valeurs match avec la regex choisie

Written by

/**
 * Met à jour la valeur et l'URL d'un élément dans un tableau multidimensionnel
 * en utilisant une expression régulière pour la recherche.
 * 
 * @param array $array Le tableau multidimensionnel à parcourir
 * @param string $searchTerm L'expression régulière à utiliser pour la recherche
 * @param string $newValue La nouvelle valeur à assigner à l'index 0
 * @param string $newUrl La nouvelle URL à assigner à l'index 1
 * @param int $index L'index de l'élément à vérifier dans les sous-tableaux
 * @return array Le tableau mis à jour
 */
function ng1UpdateArrayValueRegex($array, $searchRegex, $newValue, $newUrl, $index = 0) {

    foreach ($array as $key => $subarray) {
        // Vérifie si le sous-tableau actuel contient des sous-tableaux
        if (is_array($subarray)) {
            // Parcours tous les éléments du sous-tableau actuel pour trouver une correspondance avec l'expression régulière
            $matched = false;
            foreach ($subarray as $subkey => $value) {
                // Vérifie si l'élément à l'index $index correspond à l'expression régulière $searchRegex
                if ($subkey == $index && preg_match($searchRegex, $value)) {
                    $matched = true;
                    break;
                }
            }
            // Si une correspondance est trouvée, met à jour les valeurs pour l'index 0 et l'index 1
            if ($matched) {
                $array[$key][0] = $newValue;
                $array[$key][1] = $newUrl;
                // Sort de la boucle pour éviter de mettre à jour plusieurs occurrences
                break;
            } else {
                // Si le sous-tableau actuel ne contient pas la valeur correspondant à l'expression régulière, appelle la fonction récursivement
                $array[$key] = ng1UpdateArrayValueRegex($subarray, $searchRegex, $newValue, $newUrl, $index);
            }
        }
    }
    // Retourne le tableau mis à jour
    return $array;
}