php.de

Zurück   php.de > php.de Intern > Off-Topic Diskussionen

Off-Topic Diskussionen Mach mal Pause vom Programmieren!

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 4 Stimmen, 5,00 durchschnittlich.
Alt 15.02.2010, 20:32  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.729
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Zitat:
Zitat von rudygotya Beitrag anzeigen
oder wer auch immer möchte, neue Frage
PHP-Code:
<?php

header
('Content-Type: text/plain; charset=UTF-8');

$arr array_fill(050);

$i 0;

foreach (
$arr as &$a) {
    
$i++;
    
$a $i;
}

/* Whate happense heree ande whye? */

foreach ($arr as $a) {
    echo 
"$a\n";
}
mermshaus ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 15.02.2010, 21:24  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hehe fies. Ich tast mich mal ran:

$arr ist nach dem ersten Schleifendurchlauf ein Array mit vier Integerwerten und einer Integerreferenz. Nur die letzte ist eine Referenz, da die Originalvariable durch die Schleifendurchläufe überschrieben wird und die Referenz daher automatisch aufgelöst wird (?).

Bei der Ausgabe kann der letzte Wert nicht ausgegeben werden (das warum ist wohl deine Frage), sprich schon garnicht in $a geschrieben werden. Da noch der vorherige Wert drin steht, wird eben nochmal die 4 ausgegeben.

Das komische ist, wenn man nach dem echo ein unset($a) macht, wird im 5. Durchlauf eine 1 ausgegeben. Spätestens wo die herkommen soll, kann ich mir garnicht erklären... (Edit: die 1 ist wieder der erste Wert offenbar, spinnt der Iterator bei Referenzen?)

foreach-Bug?
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 15.02.2010, 21:58  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Witzig sind vor allem diese beiden Dumps vor und nach der letzten Schleife:

Code:
array(5) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  &int(5)
}
1
2
3
4
4
array(5) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  &int(4)
}
Anscheinend besinnt sich PHP bei der reinen Ausgabe nochmal einer obskuren Referenz auf das Vorgängerelement.
Mal aufs Wesentliche reduziert:

PHP-Code:
$arr range (15);
foreach (
$arr as &$a) {
}

var_dump ($arr);

foreach (
$arr as $a) {


var_dump ($arr); 
gibt dasselbe aus.

[edit]
Ahaaaa! Es liegt am $a in der zweiten Schleife:

PHP-Code:
foreach ($arr as $b) {


var_dump ($arr); 
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (15.02.2010 um 22:03 Uhr).
nikosch ist offline   Mit Zitat antworten
Alt 15.02.2010, 22:01  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.729
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Zitat:
Zitat von Chriz Beitrag anzeigen
Das komische ist, wenn man nach dem echo ein unset($a) macht, wird im 5. Durchlauf eine 1 ausgegeben. Spätestens wo die herkommen soll, kann ich mir garnicht erklären... (Edit: die 1 ist wieder der erste Wert offenbar, spinnt der Iterator bei Referenzen?)
Zitat:
Zitat von nikosch
Anscheinend besinnt sich PHP bei der reinen Ausgabe nochmal einer obskuren Referenz auf das Vorgängerelement.
Ich denke, man kann auch dafür auf eine logische Erklärung kommen. Ich bin gespannt.
mermshaus ist offline   Mit Zitat antworten
Alt 15.02.2010, 22:07  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Siehe oben.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 15.02.2010, 22:11  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Siehe oben.
Nur weshalb und wie?
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 15.02.2010, 22:17  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

OK geraten: das 4. Element ist irgendwie noch mit $i und damit mit dem 5. Element verbunden und überschreibt damit beim Durchlauf und der Zuweisung in der 2. foreach-Schleife das 5. Element, das ja eigenständig noch als Referenz drin hängt.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 16.02.2010, 10:31  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.729
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Worauf zeigt denn die Referenz in $arr[4]?
mermshaus ist offline   Mit Zitat antworten
Alt 16.02.2010, 10:53  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Auf $i.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 16.02.2010, 20:42  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.729
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Ich bin mir ziemlich sicher, dass sie auf $a zeigt. Die erste Schleife scheint identisch zu sein mit:

PHP-Code:
$arr array_fill(050);
$i 0;
$c count($arr);
for (
$k 0$k $c$k++) {
    
#unset($a);
    
$a = &$arr[$k];
    
$a = ++$i;

Edit: Hmm, ich fürchte, du hast Recht. Geändert. @nikosch (↓)
Edit 2: Das unset() scheint auch unnötig zu sein.

Geändert von mermshaus (20.02.2010 um 17:48 Uhr).
mermshaus ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:48 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum