php二维关联数组排序后,第一维的关联没有了。

agjaisdjfo 2017-02-28 10:37:57
php学习的时候遇到了一个问题,我建立了一个二维关联数组,有三个类别:car、keyBoard、phone,每个列别中有三个数据:num、price、sum。数组像下面这种:

car: num、price、sum
keyBoard: num、price、sum
phone: num、price、sum

然后对其中的sum元素排序,自定义了compareSum()函数。
但是排序后,再输出,就没有第一维上的关联了,也就是car、keyBoard、phone没有了,变成了默认的数字关联:0、1、2。
请问这是为什么?
我看《PHP和MySQL WEB开发》上的代码,第一维都没有指定关联,是不是PHP第一维一般不指定关联?
请各位多多指点,谢谢。

代码和输出如下:


<?php
$testArray = array(
'car'=>array(
'Num' => 10,
'Price' =>100000,
'Sum' => 1000000
),
'keyBroad'=>array(
'Num'=>1000,
'Price' => 200,
'Sum' => 200000
),
'phone' => array(
'Num' => 2000,
'Price' => 3000,
'Sum' => 6000000
)
);
foreach ($testArray as $key => $value) {
foreach ($value as $key2 => $value2) {
echo "$key => $key2 => $value2 <br/>";
}
echo "<br/>";
}

echo "~~~~~~~~~~~~~~~~~~~~~~~~<br/>";

function compareSum($x,$y){
if ($x['Sum'] == $y['Sum']) {
return 0;
}
else if ($x['Sum'] < $y["Sum"]) {
return -1;
}
else{
return 1;
}
}

usort($testArray, 'compareSum');

foreach ($testArray as $key => $value) {
foreach ($value as $key2 => $value2) {
echo "$key => $key2 => $value2 <br/>";
}
echo "<br/>";
}
?>


输出如下:
car => Num => 10
car => Price => 100000
car => Sum => 1000000

keyBroad => Num => 1000
keyBroad => Price => 200
keyBroad => Sum => 200000

phone => Num => 2000
phone => Price => 3000
phone => Sum => 6000000

~~~~~~~~~~~~~~~~~~~~~~~~
0 => Num => 1000
0 => Price => 200
0 => Sum => 200000

1 => Num => 10
1 => Price => 100000
1 => Sum => 1000000

2 => Num => 2000
2 => Price => 3000
2 => Sum => 6000000


从上面的输出可以看出来,排序以后再输出,就没有car、keyBoard、phone了。请问这是为什么?谢谢
...全文
113 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Frank_cic 2017-02-28
  • 打赏
  • 举报
回复
楼上正解
  • 打赏
  • 举报
回复
usort 函数排序后会删除原有的键名。

uasort 函数排序会保持原来的键和值之间的关联。

所以换成 uasort函数就好了。

顺便说下, 这个手册上都有, 以后遇到问题可以先查下手册。
xuzuning 2017-02-28
  • 打赏
  • 举报
回复
uasort($testArray, 'compareSum');

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧