两个原数组
$arr['id'] = array( [0] => '1', [1] => false, [2] => '3', [3] => '4', ) $arr['name'] = array( [0] => 'zhang', [1] => 'li', [2] => 'du', )
需要生成的数组
array(
[0]=>array('id'=>'1','name'=>'zhang'),
[1]=>array('id'=>false,'name'=>''),
[2]=>array('id'=>'3','name'=>'li'),
[3]=>array('id'=>'4','name'=>'du'),
)
回复内容:
两个原数组
$arr['id'] = array( [0] => '1', [1] => false, [2] => '3', [3] => '4', ) $arr['name'] = array( [0] => 'zhang', [1] => 'li', [2] => 'du', )
需要生成的数组
array(
[0]=>array('id'=>'1','name'=>'zhang'),
[1]=>array('id'=>false,'name'=>''),
[2]=>array('id'=>'3','name'=>'li'),
[3]=>array('id'=>'4','name'=>'du'),
)
我大体理解了一下不知道对不对 ...
立即学习“PHP免费学习笔记(深入)”;
就是大数组里面的第一个小数组永远是最长的 ... 如果在这个数组里有 false 值则补全其他为空白 ...
写了段示例代码如下 ... 不止可以应用于你的情况 ... 源数组更复杂也可以处理 ...
[ '1', false, '3', '4' ],
'name' => [ 'zhang', 'li', 'du' ]
];
/* get all key names ... */
$keys = array_keys( $arr );
/* use a different way to solve this ... */
var_export( array_reduce( $arr,
function( & $result, $current ) use ( & $keys ) {
/* get current key name ... */
$key = array_shift( $keys );
/* first run ..? */
if ( ! isset( $result ) )
/* initialize a new array with primary key... */
$result = array_map( function( $value ) use ( $key ) {
/* just packing value as an array ... */
return [ $key => $value ];
/* value based on $current ... known as first entry of $arr ... */
}, $current );
/* when the array is built ... add new keys into it ... */
else foreach ( $result as $num => & $value )
/* leave blank when primary key is false or entry is empty ... */
$value[$key] = ( false !== current( $value ) ) ?
array_shift( $current ) ?: '' : '';
/* send the new array back ... */
return $result;
} ) );原理就是根据原数组里面的第一个小数组建立主键 ... 然后根据主键把所有元素拼合在一起 ...
无所谓每个元素都叫什么名字 ... 也无所谓有多少元素 ... 除了主键数组之外其他小数组的键值完全不重要 ...
1.修正BUG站用资源问题,优化程序2.增加关键词搜索3.修改报价4.修正BUG 水印问题5.修改上传方式6.彻底整合论坛,实现一站通7.彻底解决群发垃圾信息问题。注册会员等发垃圾邮件7.彻底解决数据库安全9.修改交易方式.增加网站担保,和直接交易两中10.全站可选生成html.和单独新闻生成html(需要装组建)11. 网站有10中颜色选择适合不同的行业不同的颜色12.修改竞价格排名方式13.修
总之都按顺序拼在一起拼在一起变成另外一个大数组恩 ...
以及说 ... 如果小数组的长度超过主键数组长度的话 ... 超长的部分会被丢弃 ...
主键数组的长度超过小数组的话 ... 空缺的部分也会填入空白 ...
基本就是这样啦 ... 其实吧 ... 也可以简单的用 for 循环来完成 ... 效率还更高 ...
但用 array_reduce() 比较帅适应性也更强不是 ..?
$rev = array();
$ix = 0;
foreach($arr['id'] as $k=>$v){
$rev[] = array(
'id'=>$v,
'name'=> $v ? $arr['name'][$ix++] : ''
);
}
print_r($rev);
楼上给出来解释和非常漂亮的代码,下面我给个简单实现的。
$arr = array(
'id' => array('1', false, '3', '4' ),
'name' => array('zhang', 'li', 'du' )
);
foreach ($arr['id'] as $value) {
if (intval($value) > 0) {
$result[] = array(
$value => array_shift($arr['name'])
);
} else {
$result[] = array(
$value => ''
);
}
}
var_dump($result);
不是用array_combine就好了吗……










