linde 发表于 2010-4-8 22:34:52

一个PHParray的问题。

现有PHP代码如下



$result = array(
      '0'=>array('Code'=>'01','Name'=>'开始'),
      '1'=>array('Code'=>'02','Name'=>'计划中'),
      '2'=>array('Code'=>'03','Name'=>'停止'),
      '3'=>array('Code'=>'10','Name'=>'暂停'),
      '4'=>array('Code'=>'20','Name'=>'测试')
);

var_dump($result);
echo '<br />';


$test = array();


foreach($result as $k=>$v) {
    $test = array_merge($test,array($v['Code']=>$v['Name']));
}


var_dump($test);
echo '<br/>';
print_r($test);



可是执行结果却让人意外,这是什么问题??

array(5) { =>array(2) { ["Code"]=>string(2) "01" ["Name"]=>string(4) "开始" }
                  =>array(2) { ["Code"]=>string(2) "02" ["Name"]=>string(6) "计划中" }
                  =>array(2) { ["Code"]=>string(2) "03" ["Name"]=>string(4) "停止" }
                  =>array(2) { ["Code"]=>string(2) "10" ["Name"]=>string(4) "暂停" }
                  =>array(2) { ["Code"]=>string(2) "20" ["Name"]=>string(4) "测试" }
}
//下面的结果很让人意外,使用强制转型也不行。
array(5) { ["01"]=> string(4) "开始"
                  ["02"]=> string(6) "计划中"
                  ["03"]=> string(4) "停止"
                  => string(4) "暂停"
                  => string(4) "测试"
}
Array ( => 开始 => 计划中 => 停止 => 暂停 => 测试 )


我现在就是想将数据库查询出来的结果放在一个新的数组中,将code的value当作新数组的key,Name的value当作key的value.
又其他的方法吗》》

linde 发表于 2010-4-9 09:59:09

没有人看到有何异常么????

原数组中是10与20,结果却变成了0与1?


=> string(4) "暂停"
=> string(4) "测试"

linde 发表于 2010-4-9 10:17:22

召唤各位大大~~~。
Hex

Hex 发表于 2010-4-9 13:58:13

我建议给 key 加个前缀。

燃雲 发表于 2010-4-9 18:50:57

这是因为PHP认为'10'及'20'是数字,进行了reindexing。

试试:

$result = array(
      '0'=>array('Code'=>'01','Name'=>'开始'),
      '1'=>array('Code'=>'02','Name'=>'计划中'),
      '2'=>array('Code'=>'03','Name'=>'停止'),
      '3'=>array('Code'=>'010','Name'=>'暂停'),
      '4'=>array('Code'=>'020','Name'=>'测试')
);

var_dump($result);
echo '<br />';


$test = array();


foreach($result as $k=>$v) {
    $test = array_merge($test,array($v['Code']=>$v['Name']));
}


var_dump($test);
echo '<br/>';
print_r($test);

或:

$result = array(
      '0'=>array('Code'=>'01','Name'=>'开始'),
      '1'=>array('Code'=>'02','Name'=>'计划中'),
      '2'=>array('Code'=>'03','Name'=>'停止'),
      '3'=>array('Code'=>'10','Name'=>'暂停'),
      '4'=>array('Code'=>'20','Name'=>'测试')
);

var_dump($result);
echo '<br />';


$test = array();


foreach($result as $k=>$v) {
    $test += array($v['Code']=>$v['Name']);
}


var_dump($test);
echo '<br/>';
print_r($test);


注意!后面用+的例子,看到'01','02'及'03',但后面两个是10及20,并无引号。

linde 发表于 2010-4-9 21:49:49

好奇怪,居然转型了也不行。
感谢hex的建议,感谢楼上 燃雲 的例子,
不过我刚才试了 使用$test['10']也可以正常的获取道value;

就使用下面一种方式了,因为之前的那些数据是存入数据库的,01..99都是递增的。
页: [1]
查看完整版本: 一个PHParray的问题。