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

15

我按照这个问题此处此处的线索进行了跟踪。

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

$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);

我正在尝试转换字符串数组,

array_walk($numArray, 'intval')
最后两个打印块在转换前后打印出数组元素的类型。输出结果在两种情况下都是字符串。
string
string

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

  1. 转换错误了
  2. 类型检查的方式不对

或者可能两者都有问题。

同时提供完整的输入和输出:

$ 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
你能展示一下 echo "<pre/>";print_r($numArray); 的输出吗?请给我们看看。 - Alive to die - Anant
@Anant 添加了几个输入语句及其输出。 - Nikhil Kuriakose
您已经接受了答案。如果您有任何问题,请提出新的问题。 - Alive to die - Anant
2个回答

48

你应该使用array_map而不是array_walk

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

如果你仍然想使用array_walk函数,请查看手册中的说明:

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

由于intval函数无法使用引用,因此您需要将其包装在其他逻辑中,类似于以下内容:

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

2

intval()函数不会设置变量的值,它只会返回变量的整数值。

你可以这样使用:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接