Typkonvertierung im Arrays-Key
Tom
- php
Hello,
Script:
<?php
$extrakey = '27';
$_test = array();
$_test[1] = 'Eins';
$_test['thomas'] = 'tommy';
$_test['2']= 'zwei';
$_test[drei] = 'drei';
$_test[$extrakey] = 'extra';
echo "<pre>\n";
echo htmlspecialchars(print_r($_test,1));
foreach($_test as $key => $val)
{
echo "[$key] => $val | Schlüsseltyp ist ".gettype($key)." \n";
}
echo "</pre>\n";
?>
Ausgabe:
Array
(
[1] => Eins
[thomas] => tommy
[2] => zwei
[drei] => drei
[27] => extra
)
[1] => Eins | Schlüsseltyp ist integer
[thomas] => tommy | Schlüsseltyp ist string
[2] => zwei | Schlüsseltyp ist integer
[drei] => drei | Schlüsseltyp ist string
[27] => extra | Schlüsseltyp ist integer
Frage:
kann man sich darauf verlassen, dass die Umwandlung der "numerisch aussehenden" Schlüssel, die als String erfasst wurden, in Integer-Werte verbrieft ist und so bleiben wird?
Ich frag nur, weil bei PHP schon öfter sinnvolle Dinge zu unsinnigen geändert wurden.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo,
Frage:
kann man sich darauf verlassen, dass die Umwandlung der "numerisch aussehenden" Schlüssel, die als String erfasst wurden, in Integer-Werte verbrieft ist und so bleiben wird?
Ich frag nur, weil bei PHP schon öfter sinnvolle Dinge zu unsinnigen geändert wurden.
Warum fragst du nicht die Entwickler von PHP? Ich hallte es allerdings für Unsinnig sich über eine evtl. theoretisch möglich Änderung den Kopf zu zerbrechen. Sollte es in zukünftigen PHP Versionen nicht mehr funktionieren kann man vorläufig bei einer älteren bleiben und in Ruhe sich Gedanken über das Problem machen.
Grüße
Markus
Hello,
Ergänzungsfrage:
Was wird schneller sein bzw. weniger Ressourcen schlucken
ein Array in der Form:
# $_data['l1'] = array();
# $_data['p7'] = array();
# $_data['s3'] = array();
# $_data['l2'] = array();
# $_data['l3'] = array();
# $_data['l1'][0] = 'Natrium';
# $_data['l1'][1] = 'Phosphor';
# $_data['l1'][3] = 'Barium';
# $_data['p7'][0] = 0;
# $_data['p7'][5] = 7;
# $_data['p7'][27] = 4;
usw.
Es soll der größte vorhandene numerische Schlüssel des Monsters ermittelt werden.
#1. ---------------------------------
$maxkey = 0;
foreach($_data as $_column => $key)
{
foreach($_column as $key => $val)
{
if (gettype($key) == 'integer')
{
$maxkey = max($maxkey,$key);
}
}
}
#-----------------------------------.1
oder
#2. ---------------------------------
$maxkey = 0;
foreach($_data as $_column => $key)
{
$_colnames = array_keys($_data);
$max = max($_colnames);
$maxkey = ($maxkey, $max);
}
#---------------------------------.2
oder
#3. ---------------------------------
irgendwas mit array_map() oder array_walk() oder sonstiges...
Nur da fällt mir heuite Abend nix mehr ein :-(
#---------------------------------.3
Das Datenarray kann recht groß werden, sodass ich schon gerne die schnellste Funktion hätte. Außerdem muss ich vermutlich auch an den Speicher denken. Es wird PHP 4.3.x und hher eingesetzt. Mit Referenzen bei foreach() [hab eben auch nocht gesehen, dass es die schon gibt] kann ich also nicht arbeiten.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
echo $begrüßung;
Mit Referenzen bei foreach() [hab eben auch nocht gesehen, dass es die schon gibt] kann ich also nicht arbeiten.
Referenzen sollen nur dann verwendet werden, wenn sie technisch notwendig sind, nicht wenn du dir dadurch eine Einsparung einer Kopie erhoffst. Denn PHP kopiert während einer Zuweisung einer Variablen zu einer anderen nicht. Erst wenn sich einer der beiden Werte ändert wird kopiert.
http://de.php.net/manual/en/function.debug-zval-dump.php Dort weiter bei References Explained (by Derick Rethans).
echo "$verabschiedung $name";
echo $begrüßung;
kann man sich darauf verlassen, dass die Umwandlung der "numerisch aussehenden" Schlüssel, die als String erfasst wurden, in Integer-Werte verbrieft ist und so bleiben wird?
Verlassen kann man sich nie, aber: http://de.php.net/manual/en/language.types.array.php
»A key may be either an integer or a string. If a key is the standard representation of an integer, it will be interpreted as such (i.e. "8" will be interpreted as 8, while "08" will be interpreted as "08").«
echo "$verabschiedung $name";
Hello,
nur fürs Archiv hier die Funktion mit Musterdaten
Ich habe mir gerade einen abgebrochen dabei :-/
Brauche mal wieder eine Pause
$_data = array();
$_data['l1'] = array();
$_data['p7'] = array();
$_data['s3'] = array();
$_data['l2'] = array();
$_data['l3'] = array();
$_data['l1'][0] = 'Natrium';
$_data['l1'][1] = 'Phosphor';
$_data['l1'][3] = 'Barium';
$_data['p7'][0] = 0;
$_data['p7'][5] = 7;
$_data['p7'][27] = 4;
$_data['s3'][10] = 0;
$_data['s3']['5'] = 7;
$_data['s3'][312] = 4;
$_data['l3'][0] = 0;
$_data['l3']['5'] = 7;
$_data['l3']['nase'] = 4;
$_data['l3'][10] = 0;
$_data['l3'][15] = 7;
$_data['l3'][312] = 4;
function array_get_maxkey($_data)
{
$maxkey = 0;
foreach($_data as $colname => $_colval)
{
foreach($_colval as $num => $val)
{
if (gettype($num) == 'integer')
{
$maxkey = max($num, $maxkey);
}
}
}
return $maxkey;
}
Die Funktion ermittelt den größten numerischen Schlüssel in der "zweiten Dimension"
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom