php 从对象数组中内拆私有值列

enyaitl3  于 2023-10-15  发布在  PHP
关注(0)|答案(3)|浏览(94)

我有一个对象数组,我想从每个对象中取出一个特定的私有属性,以形成一个分隔字符串。
我只对数组的一个属性感兴趣。我知道如何通过foreach()来处理数据集,但是有函数式的方法吗?

$ids = "";
foreach ($itemList as $item) {
    $ids = $ids.$item->getId() . ",";
}
// $ids = "1,2,3,4"; <- this already returns the correct result

我的课是这样的:

class Item {
    private $id;
    private $name;

    function __construct($id, $name) {
        $this->id=$id;
        $this->name=$name;
    }
    
    //function getters.....
}

样本数据:

$itemList = [
    new Item(1, "Item 1"),
    new Item(2, "Item 2"),
    new Item(3, "Item 3"),
    new Item(4, "Item 4")
];
brc7rcf0

brc7rcf01#

implode之前使用array_map

$ids = implode(",", array_map(function ($item) {
    return $item->getId();
}, $itemList));
u1ehiz5o

u1ehiz5o2#

您已经对getter脚本进行了“yatta-yatta“艾德化,因此我将为两种getter方法演示两种函数式风格的方法。
1.如果类包含显式命名的方法:(Demo

public function getId()
{
    return $this->id;
}

然后你可以使用2个周期:

echo implode(',', array_map(fn($obj) => $obj->getId(), $itemList));

或1个周期,条件为:

echo array_reduce(
         $itemList,
         fn($result, $obj) => $result . ($result ? ',' : '') . $obj->getId()
     );

1.如果类包含魔术方法__get():(Demo

public function __get($prop)
{
    return $this->$prop;
}

然后你可以使用2个周期:

echo implode(',', array_map(fn($obj) => $obj->id, $itemList));

或1个周期,条件为:

echo array_reduce(
         $itemList,
         fn($result, $obj) => $result . ($result ? ',' : '') . $obj->id
     );
r6l8ljro

r6l8ljro3#

您可以使用$ids = implode(',',$itemList);

相关问题