0

我想创建一个数组,我可以随机删除 [id] 键的内容,其中它们是相同的 [parent_id]。

这是我的数组:

大批
(
    [0] => 数组
        (
            [parent_id] => 1
            [id] => 286
        )

    [1] => 数组
        (
            [parent_id] => 286
            [id] => 142
        )

    [2] => 数组
        (
            [parent_id] => 1
            [id] => 287
        )

    [3] => 数组
        (
            [parent_id] => 1
            [id] => 288
        )

    [4] => 数组
        (
            [parent_id] => 1
            [id] => 289
        )

    [5] => 数组
        (
            [parent_id] => 289
            [id] => 140
        )

    [6] => 数组
        (
            [parent_id] => 289
            [id] => 143
        )

    [7] => 数组
        (
            [parent_id] => 289
            [id] => 242
        )

)

我使用以下代码生成了它:

$parentList = array();
foreach ($list as $item) 
{
    $parentList[] = array("parent_id" => $item->parent_id, "id" => $item->id);
}

我不知道如何将数组转换为:

大批
(
    [0] => 数组
        (
            [parent_id] => 1
            [id] => 数组 (286, 287, 288, 289)
        )

    [1] => 数组
        (
            [parent_id] => 286
            [id] => 数组 (142)
        )

    [2] => 数组
        (
            [parent_id] => 289
            [id] => 数组 (140, 143, 242)
        )

)

之后,我希望在每个 [id] 数组中随机保留每个父 ID 的一个 ID。

我怎样才能做到这一点?

4

1 回答 1

1

如果结果中的键值无关紧要,则最好使用parent_id作为键。

$result = array();
foreach ($list as $entry) {
    $parent = $entry['parent_id'];

    // Make the base entry
    if (!array_key_exists($parent, $result)) {
        $result[$parent]['parent_id'] = $parent;
    }

    // Append this entry to the result
    $result[$parent]['id'][] = $entry['id'];
}

编辑:如果你只想在一个循环中得到这个结果——我现在意识到你可能是这个意思——你可以试试这个:

$parentList = array();
foreach ($list as $item) {
    // Make base entry, if it doesn't exist yet
    if (!array_key_exists($item->parent_id, $parentList)) {
        $parentList[$item->parent_id]['parent_id'] = $item->parent_id;
    }

    // Append the item id to the parent container
    $parentList[$item->parent_id]['id'][] = $item->id;
}
于 2013-07-19T14:47:23.650 回答