Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有随机删除键值的多维数组,剩余最小值为1_Php_Arrays_Multidimensional Array - Fatal编程技术网

Php 具有随机删除键值的多维数组,剩余最小值为1

Php 具有随机删除键值的多维数组,剩余最小值为1,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我想创建一个数组,可以随机删除[id]键的内容,这些内容与[parent_id]相同 这是我的阵列: Array ( [0] => Array ( [parent_id] => 1 [id] => 286 ) [1] => Array ( [parent_id] => 286 [id] => 142

我想创建一个数组,可以随机删除[id]键的内容,这些内容与[parent_id]相同

这是我的阵列:

Array ( [0] => Array ( [parent_id] => 1 [id] => 286 ) [1] => Array ( [parent_id] => 286 [id] => 142 ) [2] => Array ( [parent_id] => 1 [id] => 287 ) [3] => Array ( [parent_id] => 1 [id] => 288 ) [4] => Array ( [parent_id] => 1 [id] => 289 ) [5] => Array ( [parent_id] => 289 [id] => 140 ) [6] => Array ( [parent_id] => 289 [id] => 143 ) [7] => Array ( [parent_id] => 289 [id] => 242 ) ) 我搞不懂的是如何将数组转换为:

Array ( [0] => Array ( [parent_id] => 1 [id] => Array (286, 287, 288, 289) ) [1] => Array ( [parent_id] => 286 [id] => Array (142) ) [2] => Array ( [parent_id] => 289 [id] => Array (140, 143, 242) ) ) 排列 ( [0]=>阵列 ( [parent_id]=>1 [id]=>阵列(286287288289) ) [1] =>阵列 ( [家长id]=>286 [id]=>阵列(142) ) [2] =>阵列 ( [家长id]=>289 [id]=>阵列(140143242) ) ) 在这之后,我希望每个[id]数组中的每个父id只剩下一个id


如何实现这一点?

如果结果中的键值无关紧要,最好使用
父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;
}

是和否,@Jack。。。输出将是类似的。输入的类型是造成差异的原因。上面的代码是我编写的第一个版本,它转换了示例数组(包含父项和项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;
}