php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.04.2008, 10:42  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard bug oder blöd? array_merge

hi,

kann mir einer folgende ausgabe erklären?

Script:
PHP-Code:
<?php

$a
=Array('header'=>'Header');

$b=Array
(
    
'078' => 'XXX1',
    
'079' => 'XXX2',
    
'086' => 'XXX3',
    
'089' => 'XXX4',
    
'889' => 'XXX5'
);

print_r(array_merge($b,$a));

?>
ausgabe:

Code:
Array
(
    [header] => Header
    [078] => XXX1
    [079] => XXX2
    [086] => XXX3
    [089] => XXX4
    [0] => XXX5
)
andersrum gemerged:

Zitat:
Array
(
[078] => XXX1
[079] => XXX2
[086] => XXX3
[089] => XXX4
[0] => XXX5
[header] => Header
)
....
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 04.04.2008, 10:51  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
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

Wie auch immer hängt es mit den führenden Nullen zusammen - man kann davon ausgehen, dass hier octal interpretiert wird. Ohne führende NUll wird dann normal neu indiziert. Warum das bei Oktal nicht so ist - php arbeitet intern ja wohl doch nur mit Integer - kann ich Dir nicht sagen.

[EDIT]

Offensichtlich passiert da irgendwas in der impliziten Typumwandlung. Bei Hex gibts den selben Effekt. Eine echte Okt/Hex-Angabe wird dagegen normal 'eingereiht'.

vgl.

PHP-Code:
<?php

$a
=Array('header'=>'Header');

$b=Array
(
    
'0178' => 'okt String',
    
0179 => 'okt',
    
0x1A => 'hex',
    
'0x1A' => 'hex String',
    
'-5' => 'neg int',
    
    
'2000' => 'int 1',
    
'2001' => 'int 2',
);

print_r(array_merge($b,$a));

?>
[EDIT]

Das Verhalten läßt sich so nachvollziehen:

PHP-Code:
<?
var_dump 
(is_int (0x1A));  // TRUE
var_dump (is_int ('0x1A')); // FALSE
var_dump (is_int (0178));  // TRUE
var_dump (is_int ('0178')); // FALSE
?>
[EDIT]

Über eine (pauschale) explizite Typumwandlung kannst Du das Problem angehen. Aber Vorsicht! – echte Hex/Oktalwerte werden beim Setzen sofort in Int umgesetzt und führen dann wiederum zu falschen Ergebnissen.

PHP-Code:
<?
var_dump 
((int) 0178);
var_dump ((int) '0178');

$b=Array
(
    (int) 
'0178' => 'okt String',
    (int) 
'0x1A' => 'hex String',
);
nikosch ist offline  
 


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

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
array_merge bug, array_combine php bug, php bug array_merge, php array_merge bug, array_merge, array_merge bugg, array_merge int

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:20 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.