2014-09-20 60 views
0

這裏是我的代碼:PHP陣推繩子,但丟失的零

<?php 
$num = array("00000001","1","000","2","13454234","3"); 

$longnum = array(); 
$shortnum = array(); 

foreach($num as $key => $value) 
{ 
    if($key % 2 == 0) 
    { 
     $longnum[] += $value; 
    } 
    else 
    { 
     $shortnum[] += $value; 
    } 
} 

預期輸出:

Long num: Array ([0] => 00000001 [1] => 000[2] => 13454234) 
Short num: Array ([0] => 1 [1] => 2 [2] => 3) 

但我的輸出:

Long num: Array ([0] => 1 [1] => 1232 [2] => 13454234) 
Short num: Array ([0] => 1 [1] => 2 [2] => 3) 

我想獲得長期NUM與預期產出相同。但是,我的輸出不包含數組中的零。我應該怎麼做?

+3

將'+ ='放在這裏,並像這樣'$ longnum [] = $ value'改爲'=';'您迫使PHP通過數學函數將字符串轉換爲數字。 – Fluffeh 2014-09-20 03:54:17

+0

使用[Type Casting](http://php.net/manual/en/language.types.type-juggling.php)值,或者它會被智能猜測'int longnum [] =(string)$價值;' – bansi 2014-09-20 03:56:11

+0

嗨,Fluffeh。你解決了我的問題。 – user3905044 2014-09-20 03:56:27

回答

0

您應該只是assign(=)array。改爲刪除+=。試試這個

$num = array("00000001","1","000","2","13454234","3"); 

$longnum = array(); 
$shortnum = array(); 

foreach($num as $key => $value) 
{ 
    if($key % 2 == 0) 
    { 
     $longnum[] = $value; 
    } 
    else 
    { 
     $shortnum[] = $value; 
    } 
} 
1

你應該Type Cast值或它將被視爲int通過智能猜測。從手動

$longnum[] = (string)$value;

引用:

PHP不需要(或支撐)在可變 聲明明確的類型定義;變量的類型取決於使用該變量的上下文。也就是說,如果將一個字符串值分配給 變量$ var,$ var變成一個字符串。如果分配給$ var的整數值爲 ,則它變成一個整數。

1

您在您的問題中使用的代碼使用PHP自動進行類型轉換的能力。當您嘗試對字符串進行數學運算時,PHP會友好地嘗試將它們轉換爲您的數字。

通過使用+=運算符,您可以迫使PHP在追加到數組時執行此操作。

foreach($num as $key => $value) 
{ 
    if($key % 2 == 0) 
    { 
     $longnum[] = $value; 
    } 
    else 
    { 
     $shortnum[] = $value; 
    } 
} 

通過將您的代碼更改爲此,您將獲得預期結果。

此外,通過使用[],您正在自動向數組中添加新元素 - 因此+=實際上毫無意義 - 除了專門用於強制PHP類型轉換爲數字之外,沒有任何值需要添加 - 在這種情況下,會有更好的方法來做到這一點。