NON PUOI !!
Le stringhe contenenti interi validi verranno convertite nel tipo intero. Per esempio. il tasto "8" verrà effettivamente memorizzato sotto 8. D'altra parte "08" non verrà lanciato, in quanto non è un numero intero decimale valido.
Edit:
In realtà si può !! Cast sequential array to associative array
$obj = new stdClass;
foreach($array as $key => $value){
$obj->{$key} = $value;
}
$array = (array) $obj;
Nella maggior parte dei casi, la seguente citazione vero.
Le stringhe contenenti numeri interi validi verranno convertite nel tipo intero. Per esempio. il tasto "8" verrà effettivamente memorizzato sotto 8. D'altra parte "08" non verrà lanciato, in quanto non è un numero intero decimale valido.
Questo esempio dal PHP Docs
<?php
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
?>
Il precedente esempio visualizzerà:
array(1) {
[1]=> string(1) "d"
}
Quindi, anche se si dovesse creare un array con le chiavi numerate avrebbero solo ottenere colate indietro a numeri interi.
Sfortunatamente per me non ne ero a conoscenza fino a poco tempo fa, ma pensavo di condividere i miei tentativi falliti.
tentativi falliti
$arr = array_change_key_case($arr); // worth a try.
Restituisce un array con tutte le chiavi di matrice maiuscolo o in minuscolo. Gli indici numerati sono lasciati come è.
I miei prossimi tentativi erano di creare un nuovo array per array_combine
inserendo i vecchi valori le nuove chiavi (stringa).
Ho provato diversi modi per rendere l'array $keys
contenente valori numerici di tipo stringa.
range("A", "Z")
funziona per l'alfabeto, quindi mi piacerebbe provarlo con una stringa numerica.
$keys = range("0", (string) count($arr)); // integers
Ciò ha provocato un array pieno di chiavi, ma erano tutte di tipo int.
Ecco un paio di tentativi riusciti di creare un array con i valori di tipo stringa.
$keys = explode(',', implode(",", array_keys($arr))); // values strings
$keys = array_map('strval', array_keys($arr)); // values strings
Ora solo per combinare i due.
$arr = array_combine($keys, $arr);
Questo è quando ho scoperto stringhe numeriche casted a numeri interi.
$arr = array_combine($keys, $arr); // int strings
//assert($arr === array_values($arr)) // true.
L'unico modo per cambiare le chiavi in stringhe e mantenere i loro valori letterali sarebbe quello di anteporre la chiave con un suffisso con un punto decimale "00","01","02"
o "0.","1.","2."
.
È possibile ottenere questo come tale.
$keys = explode(',', implode(".,", array_keys($arr)) . '.'); // added decimal point
$arr = array_combine($keys, $arr);
Ovviamente questo non è l'ideale in quanto sarà necessario indirizzare elementi di array come questo.
$arr["280."]
ho creato un po 'di funzione che ha per obiettivo l'elemento di matrice corretta anche se si immette solo il numero intero e non la nuova stringa.
function array_value($array, $key){
if(array_key_exists($key, $array)){
return $array[ $key ];
}
if(is_numeric($key) && array_key_exists('.' . $key, $array)){
return $array[ '.' . $key ];
}
return null;
}
Uso
echo array_value($array, "208"); // "abc"
Edit:
In realtà si può !! Cast sequential array to associative array
Tutto questo per niente
Aveva lo stesso problema. Ho ottenuto chiavi come "0", "1" nei dati di input (dalla richiesta http) e volevo filtrarle usando 'array_intersect_key' ... sembra che userò un altro approccio. – kirilloid
Possibile duplicato di [Una stringa numerica come chiave di array in PHP] (http://stackoverflow.com/questions/4100488/a-numeric-string-as-array-key-in-php) – Flimm
@Flimm Quella domanda è stata posta dopo il mio, quindi è un duplicato di questo. – alex