在PHP中将字符串数组转换为整数数组

时间:2017-01-07 09:02:50

标签: php arrays

我关注了问题thisthis中的潜在客户。

我正在尝试将输入的数字流转换为整数数组。代码应该是自我解释的。

$handle = fopen("php://stdin","r");

print("Enter space separated numbers to be made to an array\n");

$numStream = fgets($handle);

print("Creating array from : {$numStream}\n");

//Using explode to create arrays
//now we have an array of Strings
$numArray = explode(" ", $numStream);

var_dump($numArray);

print(getType($numArray[0]));
print("\n");
array_walk($numArray, 'intval');
print(getType($numArray[1]));
print("\n");
var_dump($numArray);
print_r($numArray);

我正在尝试转换String数组,

array_walk($numArray, 'intval')

最后两个打印块在转换前后打印数组元素的类型。

两种情况下的输出都是字符串

string
string

我想知道这里发生了什么?可能..

  1. 转换错误
  2. 如何检查类型是错误的
  3. 或者两者兼而有之。

    添加完整的输入和输出

    $ php arrays/arrayStringToInteger.php 
    Enter space separated numbers to be made to an array
    1 1
    Creating array from : 1 1
    
    Array
    (
        [0] => 1
        [1] => 1
    
    )
    string
    string
    /home/ubuntu/workspace/basics/arrays/arrayStringToInteger.php:22:
     array(2) {
       [0] =>
        string(1) "1"
       [1] =>
        string(2) "1
     "
    }
     Array
     (
        [0] => 1
        [1] => 1
    
    )
    

2 个答案:

答案 0 :(得分:14)

您应该使用array_map代替array_walk

$numArray = array_map('intval', $numArray);

如果您仍想使用array_walk - 请参阅说明的manual

  

如果回调需要使用数组的实际值,请将回调的第一个参数指定为引用。然后,对这些元素所做的任何更改都将在原始数组中进行。

由于intval函数不能使用引用,因此需要将其包含在其他逻辑中,例如:

array_walk($numArray, function(&$v){ $v = intval($v); });
// which is the same as @BizzyBob solution)))

答案 1 :(得分:2)

intval()没有设置值,只返回值。

你可以这样做:

array_walk($numArray, function(&$x){$x = intval($x);});