如果变量是 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 最终实现我想要的。
这不是因为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()- 但这不会拯救您 - 您将无法确定哪个键是整数,哪个是字符串。