gpt4 book ai didi

php - 如何递归地向每个数组添加键?

转载 作者:可可西里 更新时间:2023-10-31 23:00:37 24 4
gpt4 key购买 nike

我有这个数组,

Array (
[0] => Array (
[P1] => Array (
[P2] => Array (
.
.
.
// n level
),
),
),
[1] => Array (
[P4] => Array (
[P5] => Array (
.
.
.
// n level
),
),
),
),

我想把它转换成这个数组

Array (
[0] => Array (
'id' => 0
[P1] => Array (
'id' => 'P1',
[P2] => Array (
'id' => 'P2'
.
.
.
// n level
),
),
),
[1] => Array (
'id' => '1'
[P4] => Array (
'id' => 'P4'
[P5] => Array (
'id' => 'P5'
.
.
.
n level
),
),
),
),

如您所见,我获取了每个键并将其映射到数组的直接主体中的“id”。

这是我努力过的,

function recursive_function($arr)
{
$result = [];
if (is_array($arr)) {
foreach ($arr as $el) {
$result = array_merge($result, recursive_function($el));
}
} else {
$result[] = $input;
}
return $result;
}

我是递归函数和 PHP 方面的新手,所以无法思考映射的方式和位置以及原因。

请帮我得到这个输出。任何帮助将不胜感激。

最佳答案

这是一道很好的编程课作业题。编写递归函数时,从将结束执行的情况开始。所以,假设我有我的数组并且我想“修复”它:

$old; // This is my array;
$new = fix($old); // This takes my old array and gives me a fixed one.

基本情况是我的数组为空。如果是这种情况,我只会返回,什么都不做。

function fix($a) {
if(empty($a)) return $a;
}

如果它不为空,我需要循环遍历元素。如果元素不是数组,则不要对其执行任何操作。

function fix($a) {
if(empty($a)) return $a;
foreach($a as $i=>$v) {
if(!is_array($v)) // do nothing
}
}

所以,如果 $v 是一个数组,我只想做一些事情。我想做什么?我想向其中添加一个索引,其中包含键(我的代码中的 $i)。

function fix($a) {
if(empty($a)) return $a;
foreach($a as $i=>$v) {
if(is_array($v)) { // Only do something if $v is an array
$a[$i]['id'] = $i;
}
}
}

快完成了。我们没有递归调用。因为 $v 是一个数组,所以它也需要固定。这很容易做到:

function fix($a) {
if(empty($a)) return $a;
foreach($a as $i=>$v) {
if(is_array($v)) { // Only do something if $v is an array
$a[$i] = fix($v);
$a[$i]['id'] = $i;
}
}
}

现在,$v 将被修复并替换它在数组中的旧 self 。然后,将添加 id 索引。但是,有重要的事情要做。我们需要返回固定数组!

function fix($a) {
if(empty($a)) return $a;
foreach($a as $i=>$v) {
if(is_array($v)) { // Only do something if $v is an array
$a[$i] = fix($v);
$a[$i]['id'] = $i;
}
}
return $a;
}

关于php - 如何递归地向每个数组添加键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56477340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com