2014-09-20 56 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类型转换为数字之外,没有任何值需要添加 - 在这种情况下,会有更好的方法来做到这一点。