2017-09-10 3 views
1

Warum diesen Code nicht funktioniert hat. Ich muss hex zu int in großer Textdatei umwandeln. Ich weiß nicht, wie es zu beheben ist.Str_replace funktionieren nicht mit hex

//array with hex +9999 length 
$number1 = ["90.5E1","11.46E2" "81.60E1","0x216","0xffff","8.05E2","33.30E1","0x21C"]; 
//file with hex +9999 length 
$file = '90.5E1 0x216 8.05E2 8.05E2'; 

foreach ($number1 as $value) { 
    $int = (int)$value; 
    $file = str_replace($value,$int,$file); 
} 

return $file; 
+0

Beitrag das Ergebnis Code –

+0

Eigentlich - Ich denke, die ersetzen funktioniert, es ist nur die Werte, die Sie wollen, dass sie ersetzen sind falsch. –

Antwort

0

Sie haben einen Parse-Fehler in Ihrem Array fehlt ein Komma!

//array with hex +9999 length 
$number1 = ["90.5E1","11.46E2", "81.60E1","0x216","0xffff","8.05E2","33.30E1","0x21C"]; 
//file with hex +9999 length 
$file = '90.5E1 0x216 8.05E2 8.05E2'; 

foreach ($number1 as $value) { 
    $int = (int)$value; 
    $file = str_replace($value,$int,$file); 
} 

echo $file; 

kehrt: 905 0 805 805

+0

ihr Beispiel im writed, Problem mit "suchen", nicht mit ersetzen oder Array –

0

Sie eine Zeichenfolge wie "0xFF" umwandeln kann mit intval("0xFF", 0) verhexen. Die 0 macht es das 0x Präfix erkennen und automatisch von Hex konvertieren.

//array with hex +9999 length 
$number1 = ["90.5E1","11.46E2","81.60E1","0x216","0xffff","8.05E2","33.30E1","0x21C"]; 
//file with hex +9999 length 
$file = '90.5E1 0x216 8.05E2 8.05E2'; 

foreach ($number1 as $value) { 
    if (substr($value, 0, 2) == '0x') 
     $int = intval($value, 0); 
    else 
     $int = (int)$value; 
    $file = str_replace($value,$int,$file); 
} 

echo $file; 

Ausgänge: 905 534 805 805

EDIT:

Wenn Sie die Werte ersetzen möchten, ohne $number1 zu verwenden, können Sie die Datei durch Leerzeichen geteilt und jeder der Werte ersetzen:

$file = '90.5E1 0x216 8.05E2 8.05E2'; 

$file = preg_replace_callback('/([^ ]+)/', function ($matches) { 
    $value = $matches[0]; 
    if (substr($value, 0, 2) == '0x') 
    return intval($value, 0); 
    else 
    return (int)$value; 
}, $file); 

echo $file; 

Ausgänge: 905 534 805 805

+0

Problem nicht mit "ersetzen", Problem mit find 'str_replace ($ value, 'hello_wrld', $ file);' –

+0

Vielleicht ist Ihre Frage bearbeiten " erwartete Eingabe "und" erwartete Ausgabe ". Möchten Sie die Ersetzung durchführen, ohne '$ number1' zu verwenden? –