3

如果变量是 int 值,array_combine php 函数不保留字符串变量的数据类型

一个简单的例子:

$a = array('1', '2');
$b = array('first', 'second');
$c = array_combine($a, $b);
$ak = array_keys($c);
var_dump($ak);

这将产生输出:1 和 2 的整数值。

我想要的是保留值 1 和 2 的字符串类型

对于临时,我使用过:

array_walk 最终实现我想要的。

4

1 回答 1

4

这不是因为array_combine()函数的特定行为,而是因为PHP 数组中的有效整数键类型转换:

$array = [1=>'foo', '2'=>'bar', 'x'=>'baz'];
var_dump($array); // 1 and 2 are int

还有一些其他的键类型转换规则(见上面的链接)。

但是,无论如何,有一些技巧可以实现字符串键,例如:

$obj = new StdClass();
$obj->{'1'}='foo';
var_dump((array)$obj);//array(1) { ["1"]=> string(3) "foo" } 

- 但这仅供参考 - 我不建议使用它。对于您的问题,您可以使用类似array_map()将其应用于结果的方法array_keys()- 但这不会拯救您 - 您将无法确定哪个键是整数,哪个是字符串。

于 2013-11-11T09:01:14.957 回答