我正在尝试将输入的数字流转换为整数数组。代码应该是自我解释的。
$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
我想知道这里发生了什么?可能..
或者两者兼而有之。
添加完整的输入和输出
$ 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
)
答案 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);});