array_multisort将字符串索引转换为整数索引


array_multisort Converts string index into an integer index

我有两个数组:

 $info = array();
 $submitted = array();

下面声明了一个赋值:

 $info['idnumber'] = 10066;
 $submitted[$info['idnumber']] = 'Wow';
 array_multisort($submitted); 

操作完成后,显示$submitted array。

 foreach($submitted as $key => $row){
      echo $key;
 }

为什么显示0而不是10066 ?我试着将我的代码调整为:

$info['idnumber'] = 10066;
$submitted[(string)$info['idnumber']] = 'Wow';

$info['idnumber'] = 10066;
$submitted[strval($info['idnumber'])] = 'Wow';

仍然显示0。如何将10066显示为$submitted数组的索引?

更新:

我发现这是一个已知的错误的array_multisort,但它仍然没有解决方案。你知道怎么修吗?

正如你所指出的,这是一种已知的行为。

在讨论中提出了解决方案

目前我要说的是前缀你所有的数组键与一个额外的0(或任何非数字),以强制转换为字符串。

当您尝试将整型转换为字符串时:

(string)$info['idnumber']

你仍然得到整数,因为你有一个有效的数字作为字符串。

所以你需要一个带前缀的字符串。前缀可以是0或任何其他非数字字符。如i

$info['idnumber'] = '010066';

$info['idnumber'] = 'i00066';

这将返回确切的索引。