Notatki PHP

prywatne zapiski na kamieniu

Mamy tablicę, np.:

 
$tablica1 = array("a" => "green", "brazowy" => "brown", "c" => "blue", "red");

Chcemy w niej zamienić nazwę klucza "a" na nową "kolor".

 
 
function array_rename_key($array, $key, $newkey){
    if( !isset($key, $array) || array_key_exists($newkey, $array)) return FALSE;
    $uid = uniqid(''); //To clearly identify the Element.
    $preserve_value = $array[$key]; //Keep the Value
    $array[$key] = $uid; //Overwrite Value with ID
    $array = array_flip($array); //Flip the Array keys and values
    $array[$uid] = $newkey; //Set Value of the ID with new Key.
    $array = array_flip($array); //Everything back in Place.
    $array[$newkey] = $preserve_value;
    return $array;
}
 
 
$c = array_rename_key($tablica1, 'a', 'kolor');

Otrzymamy w rezultacie nową tablicę:

 
array (4)
kolor => "green" (5)
brazowy => "brown" (5)
c => "blue" (4)
0 => "red" (3)

 

Inny przykład:

 
 
function array_keys_prefix($arr, $pref = "") {
    $rarr = array();
    foreach ($arr as $key => $val) {
        $rarr[$pref.$key] = $val;
    }
    return $rarr;
}
 
function array_keys_prefix_multi($arr, $pref = "") {
    $rarr = array();
    foreach ($arr as $key => $val) {
        $rarr[] = array_keys_prefix($val, $pref);
    }
    return $rarr;
}
 
 
$a = array("foo" => "FOO", "bar" => "BAR", "baz" => array(1,2,3));
 
print_r(array_keys_prefix($a, "id_"));
 
// db fetch...
$products = array(
    array("id" => 1, "name" => "Foo"),
    array("id" => 2, "name" => "Bar")
);
print_r(array_keys_prefix_multi($products, "product_"));
 

Otrzymamy:

 
array (3)
id_foo => "FOO" (3)
id_bar => "BAR" (3)
id_baz => array (3)
0 => 1
1 => 2
2 => 3
 
 
array (2)
0 => array (2)
product_id => 1
product_name => "Foo" (3)
1 => array (2)
product_id => 2
product_name => "Bar" (3)