78 votes

Comment renommer les clés d'un tableau en PHP ?

Lorsque je fais un var_dump sur une variable appelée $tags (un tableau multidimensionnel), j'obtiens ceci :

Array
(
    \[0\] => Array
        (
            \[name\] => tabbing
            \[url\] => tabbing
        )

    \[1\] => Array
        (
            \[name\] => tabby ridiman
            \[url\] => tabby-ridiman
        )

    \[2\] => Array
        (
            \[name\] => tables
            \[url\] => tables
        )

    \[3\] => Array
        (
            \[name\] => tabloids
            \[url\] => tabloids
        )

    \[4\] => Array
        (
            \[name\] => taco bell
            \[url\] => taco-bell
        )

    \[5\] => Array
        (
            \[name\] => tacos
            \[url\] => tacos
        )
)

Je voudrais renommer toutes les clés du tableau appelées "url" en "valeur". Quelle serait la bonne façon de procéder ?

167voto

alex Points 186293

Vous pourriez utiliser array_map() pour le faire.

$tags = array_map(function($tag) {
    return array(
        'name' => $tag['name'],
        'value' => $tag['url']
    );
}, $tags);

41voto

Rocket Hazmat Points 87407

On boucle, on met la nouvelle clé, on enlève l'ancienne.

foreach($tags as &$val){
    $val['value'] = $val['url'];
    unset($val['url']);
}

8voto

CharybdeBE Points 753

En ce qui concerne le PHP fonctionnel, j'ai cette réponse plus générique :

    array_map(function($arr){
        $ret = $arr;
        $ret['value'] = $ret['url'];
        unset($ret['url']);
        return $ret;
    }, $tag);
}

8voto

Bill Barsch Points 61

Fonction récursive de renommage des clés en php :

function replaceKeys($oldKey, $newKey, array $input){
    $return = array(); 
    foreach ($input as $key => $value) {
        if ($key===$oldKey)
            $key = $newKey;

        if (is_array($value))
            $value = replaceKeys( $oldKey, $newKey, $value);

        $return[$key] = $value;
    }
    return $return; 
}

6voto

Matt H. Points 1484
foreach ($basearr as &$row)
{
    $row['value'] = $row['url'];
    unset( $row['url'] );
}

unset($row);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X