鍍金池/ 問(wèn)答/數(shù)據(jù)分析&挖掘  PHP  C/ php無(wú)限極數(shù)組,獲取指定鍵值

php無(wú)限極數(shù)組,獲取指定鍵值

無(wú)限極數(shù)組,如果我只想取部分字段如下面數(shù)組,只保留rid,title,data三個(gè)字段,該如何實(shí)現(xiàn)了.我知道php有個(gè)函數(shù)array_walk_recursive是做數(shù)組遞歸遍歷的,但是對(duì)實(shí)現(xiàn)這個(gè)一點(diǎn)思路也沒(méi)有,請(qǐng)大家提供一些有逼格的寫(xiě)法
圖片描述

回答
編輯回答
萌吟

定義一個(gè)新數(shù)組,在你遍歷的時(shí)候,把你想要的字段放到這個(gè)新數(shù)組中.

$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);

輸出結(jié)果如下:(data里面的字段沒(méi)有過(guò)濾)

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)
    }
  }
}
2018年5月28日 01:58
編輯回答
夢(mèng)若殤

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;
    }
2017年6月8日 14:45
編輯回答
歆久

sql語(yǔ)句查詢的時(shí)候只select這幾個(gè)字段就行了啊

2017年7月7日 05:37
編輯回答
念初

用遞歸方法處理一下就好了,如下:

<?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']);
        }
    });
}
2017年8月1日 16:01
編輯回答
風(fēng)畔

直接循環(huán)或者查詢的時(shí)候就指定查詢這幾個(gè)就好了

2017年7月28日 21:33