Удалите элементы полностью, если все их значения пустые во всем массиве PHP - PullRequest
0 голосов
/ 01 мая 2019
$arr = [
    [
        'RecordCount' => 1938,
        'CardNumber' => null,
        'CompanyID' => null,
        'RecordRequest' =>null,
        'RecordStatus' => 26
    ],
    [
        'RecordCount' => 2622,
        'CardNumber' => 5786,
        'CompanyID' =>null,
        'RecordRequest' =>null,
        'RecordStatus' => 26
    ],
    [
        'RecordCount' => 2874,
        'CardNumber' => 2874,
        'CompanyID' =>null,
        'RecordRequest' =>null,
        'RecordStatus' => 26    
    ]
];

Есть ли функция, которая полностью удалит companyID и RecordRequest из массива, потому что их значения пусты во всем массиве? Он сохранит cardNumber, потому что он не будет пустым во всем массиве. Возвращение:

[0] => Array(
    [RecordCount] => 1938
    [CardNumber] => null
    [RecordStatus] => 26
)
[1] => Array(
    [RecordCount] => 2622
    [CardNumber] => 5786
    [RecordStatus] => 26
)
[2] => Array(
    [RecordCount] => 2874
    [CardNumber] => 6875
    [RecordStatus] => 26
)

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

нет встроенных функций для этого, но это должно работать (ps! Написано для php> = 7.1):

function remove_always_nulls(Iterable &$it)
{
    // dictionary of keys to keep (because they were non-null at some point)
    $keep_dict=array();
    $inner=function(Iterable $it)use(&$inner,&$keep_dict){
    foreach ($it as $key => $val) {
        if (is_iterable($val)) {
            $keep_dict[$key]=true;
            $inner($val);
        } elseif (!is_null($val)) {
            $keep_dict[$key]=true;
        }
    }
    };
    $inner($it);
    $remover=function(Iterable &$it_remove) use(&$remover,&$keep_dict){
        foreach($it_remove as $key=>&$val){
            if(is_iterable($val)){$remover($val);}elseif(!($keep_dict[$key]??false)){unset($it_remove[$key]);}
        }
    };
    $remover($it);
}
0 голосов
/ 01 мая 2019

вы можете использовать array_map.

. Это вызовет функцию для каждого элемента в массиве.

в функции, создайте временный массив, который будет содержать значения, которые не являютсяпусто и возвращает этот временный массив как результат этой итерации.

<?php

$arr = [
    [
        'RecordCount' => 1938,
        'CardNumber' => 4093,
        'CompanyID' => null,
        'RecordRequest' =>null,
        'RecordStatus' => 26
    ],
    [
        'RecordCount' => 2622,
        'CardNumber' => 5786,
        'CompanyID' =>null,
        'RecordRequest' =>null,
        'RecordStatus' => 26
    ],
    [
        'RecordCount' => 2874,
        'CardNumber' => 2874,
        'CompanyID' =>null,
        'RecordRequest' =>null,
        'RecordStatus' => 26    
    ]
];


$res = array_map(function($subarr) {
    $tmp = [];
    foreach($subarr as $key=>$val) {
        if(!empty($val)) {
            $tmp[$key] = $val;
        }
    }

    return $tmp;

},$arr);

var_dump($res);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...