2010-02-08 6 views
1

Est-il possible d'éditer la clé une fois qu'elle a été faite?Comment modifier la clé d'un tableau?

Je sais que vous pouvez créer un tableau avec une clé différente, mais je ne pouvais rien voir sur le site php concernant la modification de la dernière clé.

tableau original:

Array 
(
    [0] => first 
    [1] => color 
) 

Ce que je voudrais:

Array 
(
    [newName] => first 
    [1] => color 
) 

Répondre

2

Si vous souhaitez modifier la clé d'un élément, vous devez soit définir la valeur avec la nouvelle clé et unset() l'ancien (cette technique modifie l'ordre du tableau):

$arr['newName'] = $arr[0]; 
unset($arr[0]); 

ou de l'utilisation une enveloppe qui renonce à boucle et vous permet de modifier les clés, comme par exemple:

function array_change_key(&$array, $search, $replace) { 
    $keys = array_keys($array); 
    $values = array_values($array); 

    // Return FALSE if replace key already exists 
    if(array_search($replace, $keys) !== FALSE) return FALSE; 

    // Return FALSE if search key doesn't exists 
    $searchKey = array_search($search, $keys); 
    if($searchKey === FALSE) return FALSE; 

    $keys[$searchKey] = $replace; 
    $array = array_combine($keys, $values); 

    return TRUE; // Swap complete 
} 
0
$array = array('foo', 'bar'); 

$array['newName'] = $array[0]; 
unset($array[0]); 

C'est à peu près la seule chose que vous pouvez faire.

+2

Cela modifie l'ordre du tableau. –

1

Voici une autre approche simple, ce qui est probablement assez efficace, aussi longtemps que vous faites tout votre ressaisie pour chaque tableau en un seul appel:

<?php 
function mapKeys(array $arr, array $map) { 
    //we'll build our new, rekeyed array here: 
    $newArray = array(); 
    //iterate through the source array 
    foreach($arr as $oldKey => $value) { 
    //if the old key has been mapped to a new key, use the new one. 
    //Otherwise keep the old key 
    $newKey = isset($map[$key]) ? $map[$key] : $oldKey; 
    //add the value to the new array with the "new" key 
    $newArray[$newKey] = $value; 
    } 
    return $newArray; 
} 

$arr = array('first', 'color'); 
$map = array(0 => 'newName'); 

print_r(mapKeys($arr, $map)); 
Questions connexes