----- Original Message ----- From: "Richard Quadling" <rquadl...@googlemail.com>
To: <cr.vege...@gmail.com>
Cc: <php-general@lists.php.net>
Sent: Friday, May 21, 2010 1:30 PM
Subject: Re: [PHP] how to update array keys and keep element order ?


On 21 May 2010 10:56,  <cr.vege...@gmail.com> wrote:
How do I update an array key without disturbing the element order ?
Suppose an existing array("FR", values ...)
where I want to change 0 => "FR" to "country" => "FR"
and keep the original element order.

TIA, Cor


Something like ...

function arrayKeyChange(array &$array, $oldKey, $newKey) {
if (!array_key_exists($oldKey, $array)) {
trigger_error('Requested key does not exist.', E_USER_WARNING);
return False;
}
if (array_key_exists($oldKey, $array) && array_key_exists($newKey, $array)) {
trigger_error('Will result in duplicate keys.', E_USER_WARNING);
return False;
}

// Split keys/values
$keys = array_keys($array);
$values = array_values($array);

// Find position of oldKey
$oldKeyPos = array_search($oldKey, $keys, True);

// Replace key
$keys[$oldKeyPos] = $newKey;

// Combine keys/values
$array = array_combine($keys, $values);

return True;
}

Thanks Richard,

I will check your solution. I tried the following:

function ar_replacekeys ($array, $replacements)
{
    foreach ($array as $key => $value)  // 1)
    {
        foreach ($replacements as $oldkey => $newkey)
        {
            if ($key == $oldkey)
           {
               $array[$newkey] = $value;    // 2)
               unset($array[$key]);              // 2)
           }
        }
    }
}

Works fine, except that replaced elements are placed at the end. (2)
Also tested: foreach ($array as &$key => $value)    (1)
but this gave "Key element cannot be a reference"




--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to