PHP 遍历多维数组成一维,(数组元素可为对象)

  • 被转化的数组可多维,数组元素可为对象。但建议不要数组维度不要太多,因为简单的递归效率不是很高。
  • mulArray和test方法都在同一个class中,$one为class的属性

一、形式①,将数组每层的键拼接的情况

1.代码

public function mulArray($array,$pre='')
{
        foreach ($array as $key=>$value) {
            if (is_object($value)) {
                $value = json_decode(json_encode($value),true);
            }
            if(is_array($value)) {
                if ($pre != '') {
                    $this->mulArray($value,$pre.'.'.$key);
                } else {
                    $this->mulArray($value, $key);
                }
            } else {
                if ($pre != '') {
                    $this->one[$pre . '.' . $key] = $value;
                } else {
                    $this->one[$key] = $value;
                }
            }
        }

        return $this->one;
}

2.测试

    public function test()
    {
        $a = ['a'=>'aa','b'=>['c'=>'cc','d'=>['e'=>'ee']]];
        $new = $this->mulArray($a);
        echo '<pre>';
        print_r($new);
        echo '</pre>';
    }

3.输出如下:

Array
(
    [a] => aa
    [b.c] => cc
    [b.d.e] => ee
)

二、形式②,单纯转化为一维数组

1.代码

    public function mulArray($array)
    {

        foreach ($array as $key=>$value) {
            if (is_object($value)) {
                $value = json_decode(json_encode($value),true);
            }
            if(is_array($value)) {
                $this->mulArray($value);
            } else {
                $this->one[$key] = $value;
            }
        }
     }

2.测试

    public function test()
    {
        $a =array(
            'a'=>'aa',
            'b'=>array(
                'c'=>'cc',
                'd'=>array('e'=>'ee'),
            ),
        );
        $new = $this->mulArray($a);

        echo '<pre>';
        print_r($new);
        echo '</pre>';
    }

3.输出如下:

Array
(
    [a] => aa
    [c] => cc
    [e] => ee
)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值