用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2920|回复: 5
收起左侧

一个PHParray的问题。

[复制链接]
发表于 2010-4-8 22:34:52 | 显示全部楼层 |阅读模式
现有PHP代码如下

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);
 
 
复制代码


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

  1. array(5) { [0]=&gt;  array(2) { [&quot;Code&quot;]=&gt;  string(2) &quot;01&quot; [&quot;Name&quot;]=&gt;  string(4) &quot;开始&quot; }
  2.                   [1]=&gt;  array(2) { [&quot;Code&quot;]=&gt;  string(2) &quot;02&quot; [&quot;Name&quot;]=&gt;  string(6) &quot;计划中&quot; }
  3.                   [2]=&gt;  array(2) { [&quot;Code&quot;]=&gt;  string(2) &quot;03&quot; [&quot;Name&quot;]=&gt;  string(4) &quot;停止&quot; }
  4.                   [3]=&gt;  array(2) { [&quot;Code&quot;]=&gt;  string(2) &quot;10&quot; [&quot;Name&quot;]=&gt;  string(4) &quot;暂停&quot; }
  5.                   [4]=&gt;  array(2) { [&quot;Code&quot;]=&gt;  string(2) &quot;20&quot; [&quot;Name&quot;]=&gt;  string(4) &quot;测试&quot; }
  6. }
  7. //下面的结果很让人意外,使用强制转型也不行。
  8. array(5) { [&quot;01&quot;]=&gt; string(4) &quot;开始&quot;
  9.                   [&quot;02&quot;]=&gt; string(6) &quot;计划中&quot;
  10.                   [&quot;03&quot;]=&gt; string(4) &quot;停止&quot;
  11.                   [0]=&gt; string(4) &quot;暂停&quot;
  12.                   [1]=&gt; string(4) &quot;测试&quot;
  13. }
  14. Array ( [01] =&gt; 开始 [02] =&gt; 计划中 [03] =&gt; 停止 [0] =&gt; 暂停 [1] =&gt; 测试 )
复制代码


我现在就是想将数据库查询出来的结果放在一个新的数组中,将code的value当作新数组的key,Name的value当作key的value.
又其他的方法吗》》
 楼主| 发表于 2010-4-9 09:59:09 | 显示全部楼层
没有人看到有何异常么????

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


[0]=> string(4) "暂停"
[1]=> string(4) "测试"
 楼主| 发表于 2010-4-9 10:17:22 | 显示全部楼层
召唤各位大大~~~。
Hex
发表于 2010-4-9 13:58:13 | 显示全部楼层
我建议给 key 加个前缀。
发表于 2010-4-9 18:50:57 | 显示全部楼层
这是因为PHP认为'10'及'20'是数字,进行了reindexing。

试试:
PHP复制代码
 
$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);
 
复制代码

或:
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($v['Code']=>$v['Name']);
}
 
 
var_dump($test);
echo '<br/>';
print_r($test);
 
复制代码


注意!后面用+的例子,看到'01','02'及'03',但后面两个是10及20,并无引号。
 楼主| 发表于 2010-4-9 21:49:49 | 显示全部楼层
好奇怪,居然转型了也不行。
感谢hex的建议,感谢楼上 燃雲 的例子,
不过我刚才试了 使用$test['10']也可以正常的获取道value;

就使用下面一种方式了,因为之前的那些数据是存入数据库的,01..99都是递增的。

本版积分规则