Hi Community.
Lasst euch von Titel des Threads nicht abschrecken. Es geht im Grunde um ein einfach zu verstehendes Thema.
Allerdings habe ich etwas erlebt/entdeckt was mich verwirrt zurücklässt.
Stellt euch ein Array vor:
Array (
[0] => Array(
[id] => 1
[model] => test1
[price] => 99
[qty] => 1
)
[1] => Array(
[id] => 2
[model] => test2
[price] => 129.99
[qty] => 1
)
[sum_price] => 228.99
)
Der aufmerksame Leser hat sicherlich bemerkt, daß ein key, entgegen der anderen, nicht numerisch ist, nämlich
sum_price. So weit so gut.
Nun möchte ich durch das Array loopen und mir die Werte ausgeben lassen, außer dem Wert in
sum_price, den will ich getrennt ausgeben.
Ich mache also vereinfacht Folgendes:
foreach($array as $k => $vals) {
if($k != 'sum_price') {
echo $vals['id'].' | '.$vals['model'].' | '.$vals['price'].' | '.$vals['qty'].'<br />;
}
}
Auf PHP 8.1 läuft das wie erwartet.
Auf PHP 7.3.4 jedoch nicht. Da wird im
foreach nichts ausgegeben.
Hat mich bestimmt 'ne halbe Stunde oder gar mehr gekostet um herauszufinden was hier gebacken ist.
Der Code ist etwas komplexer als das vereinfachte Beispiel hier, mit vorausgehenden If-Conditions.
Auf PHP 7.3.4 läuft es nur wenn der Vergleich typen-sicher gemacht wird ( !== anstatt !=), also so:
foreach($array as $k => $vals) {
if($k !== 'sum_price') {
echo $vals['id'].' | '.$vals['model'].' | '.$vals['price'].' | '.$vals['qty'].'<br />;
}
}
Was ist denn da los. Habe ich noch nie gehört oder gesehen.
PHP ist, was allenthalben immer mal wieder kritisiert wird, sehr typen-tolerant.
Will sagen
$my_var = 1;var_dump($my_var == '1');$my_other_var = '1';var_dump($my_var == 1); ergibt beides
bool(true), was mit === nicht so wäre.
Was ist denn dann auf PHP 7.3.4 plötzlich los ?
Hat jemand so etwas schonmal gehört oder erlebt ?
Hat jemand Insider-Wissen und kann mich aufklären ?
Gruß,
noRiddle
Linkback: https://www.modified-shop.org/forum/index.php?topic=42591.0