• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php组合生成一个特殊数组的问题

php 搞代码 3年前 (2022-01-25) 26次浏览 已收录 0个评论
文章目录[隐藏]

两个原数组

$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'=<i>本文@来#源gaodai$ma#com搞$$代**码网</i><strong>搞代gaodaima码</strong>>'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'),)

我大体理解了一下不知道对不对 …

就是大数组里面的第一个小数组永远是最长的 … 如果在这个数组里有 false 值则补全其他为空白 …

写了段示例代码如下 … 不止可以应用于你的情况 … 源数组更复杂也可以处理 …

<?php/* your array puts here ... primary key must be the first entry ... */$arr = [    'id'    =>  [ '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;} ) );

原理就是根据原数组里面的第一个小数组建立主键 … 然后根据主键把所有元素拼合在一起 …

无所谓每个元素都叫什么名字 … 也无所谓有多少元素 … 除了主键数组之外其他小数组的键值完全不重要 …

总之都按顺序拼在一起拼在一起变成另外一个大数组恩 …

以及说 … 如果小数组的长度超过主键数组长度的话 … 超长的部分会被丢弃 …

主键数组的长度超过小数组的话 … 空缺的部分也会填入空白 …

基本就是这样啦 … 其实吧 … 也可以简单的用 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就好了吗……


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php组合生成一个特殊数组的问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址