如何删除多维Laravel集合中的列?

czq61nw1  于 2023-08-08  发布在  其他
关注(0)|答案(7)|浏览(108)

我只想从多维集合中删除一列。

$z = collect(
    ["x"=>"a", "y"=>"b", "z"=>"c"],
    ["x"=>"c", "y"=>"d", "z"=>"e"]
);

$z->deleteColumn("x");

字符串
$z现在应该有数据集:

[
   ["y"=>b", "z"=> "c"]
   ["y"=>d", "z"=> "e"]
]


我可以使用一个Map函数与except,但有没有一个简单的一行我错过了?这看起来很常见。

f1tvaqid

f1tvaqid1#

使用transform()方法:

$collection->transform(function($i) {
    unset($i->x);
    return $i;
});

字符串

vyu0f0g1

vyu0f0g12#

最好设置需要的内容,而不是删除不需要的内容。您将拥有易于扩展和修改的代码。
transform()方法与only()沿着使用:

$collection->transform(function($item) {
    return $item->only(['y', 'z']);
});

字符串

wgxvkvu9

wgxvkvu93#

我迟到了,但这也可以通过以下方式完成:

$collection->transform(function(array $item) {
    return Arr::except($item, 'x');
});

字符串

y3bcpkx1

y3bcpkx14#

$syncData = $z->map(function($attr){
     return Arr::only($attr, ['y', 'z']);
});

字符串
Laravel 8.*

llycmphe

llycmphe5#

你可以使用Laravel的pluck方法,像这样:

$z = collect([
    ["x"=>"a", "y"=>"b"],
    ["x"=>"c", "y"=>"d"]
);

$z = $z->pluck('y');
//["b", "d"]

字符串

qlzsbp2j

qlzsbp2j6#

最后我给Collection类写了一个宏。

/**
 * Pass array or string of key column names to remove
 */
Collection::macro('removeCols', function ($except) {
    if (!is_array($except)) $except = (array)$except;

    // Single Dimensional arrays
    if (!is_array($this->first()) && !is_object($this->first())) return $this->except($except);

    // Multi Dimensional arrays
    $out = $this->map(function ($item) use ($except) {
        $item = collect($item);
        return $item->except($except)->toArray();
    });

    return collect($out);
});

字符串

xpcnnkqh

xpcnnkqh7#

单线解

$collections->transform(fn ($item) => Arr::except($item, 'column'));

字符串

相关问题