php无限极数组,获取指定键值

发布于 2022-09-06 13:21:11 字数 249 浏览 12 评论 0

无限极数组,如果我只想取部分字段如下面数组,只保留rid,title,data三个字段,该如何实现了.我知道php有个函数array_walk_recursive是做数组递归遍历的,但是对实现这个一点思路也没有,请大家提供一些有逼格的写法
图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

薄暮涼年 2022-09-13 13:21:11

sql语句查询的时候只select这几个字段就行了啊

似狗非友 2022-09-13 13:21:11

直接循环或者查询的时候就指定查询这几个就好了

风渺 2022-09-13 13:21:11

clipboard.png

clipboard.png

clipboard.png

代码:

    private function test2($arr)
    {
        foreach ($arr as $k => $v) {
            if (is_numeric($k)) {
                $arr[$k]         = array_intersect_key($v, array_flip(['rid', 'title', 'data']));
                if (!empty($v['data'])) {
                    $arr[$k]['data'] = $this->test2($v['data']);
                }
            }
        }
        return $arr;
    }
撕心裂肺的伤痛 2022-09-13 13:21:11

定义一个新数组,在你遍历的时候,把你想要的字段放到这个新数组中.

$arr = [
    [
        'rid'  => 1,
        'name' => 'wuzhc',
        '_level' => 1,
        'data' => [
            [
                'rid'  => 2,
                'name' => 'haha',
                '_level' => 2,
                'data' => [
                    [
                        'rid'  => 3,
                        'name' => 'lili',
                        '_level' => 3,
                        'data' => []
                    ]
                ],
            ],
            [
                'rid'  => 4,
                'name' => 'wewe',
                'data' => [],
                '_level' => 1,
            ]
        ]
    ]
];

$info = [];
foreach ($arr as $k => $v) {
    $info['rid'] = $v['rid'];
    $info['name'] = $v['name'];
    $info['data'] = $v['data'];
}

var_dump($info);

输出结果如下:(data里面的字段没有过滤)

array(3) {
  ["rid"]=>
  int(1)
  ["name"]=>
  string(5) "wuzhc"
  ["data"]=>
  array(2) {
    [0]=>
    array(4) {
      ["rid"]=>
      int(2)
      ["name"]=>
      string(4) "haha"
      ["_level"]=>
      int(2)
      ["data"]=>
      array(1) {
        [0]=>
        array(4) {
          ["rid"]=>
          int(3)
          ["name"]=>
          string(4) "lili"
          ["_level"]=>
          int(3)
          ["data"]=>
          array(0) {
          }
        }
      }
    }
    [1]=>
    array(4) {
      ["rid"]=>
      int(4)
      ["name"]=>
      string(4) "wewe"
      ["data"]=>
      array(0) {
      }
      ["_level"]=>
      int(1)
    }
  }
}
风尘浪孓 2022-09-13 13:21:11

用递归方法处理一下就好了,如下:

<?php

$arr = [
    [
        'rid'  => 1,
        'name' => 'wuzhc',
        '_level' => 1,
        'data' => [
            [
                'rid'  => 2,
                'name' => 'haha',
                '_level' => 2,
                'data' => [
                    [
                        'rid'  => 3,
                        'name' => 'lili',
                        '_level' => 3,
                        'data' => []
                    ]
                ],
            ],
            [
                'rid'  => 4,
                'name' => 'wewe',
                'data' => [],
                '_level' => 1,
            ]
        ]
    ]
];

walkData($arr);
print_r($arr);

function walkData(&$data)
{
    if (!$data) {
        return;
    }

    array_walk($data, function (&$d) {
        unset($d['name'], $d['_level']); // 这里删除你不想要的字段
        if ($d['data']) {
            walkData($d['data']);
        }
    });
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文