从PHP数组中删除第一级索引

3
我可以帮您翻译成中文。这是一段关于编程的内容,询问如何在不使用循环的情况下,从一个数组中移除第一级索引并保留其值。请注意,需要保留HTML标签。

输入数组:

Array (
    [0] => Array(
             [2135] => Array(
                         [id] => 2135
                         [first_name] => John
                         [last_name] => Doe
                       )
            ),
    [1] => Array (
             [3245] => Array(
                         [id] => 3245
                         [first_name] => Sally
                         [last_name] => Smith
                       )
            )
)

预期输出:
Array (
     [2135] => Array(
                 [id] => 2135
                 [first_name] => John
                 [last_name] => Doe
               ),


     [3245] => Array(
                 [id] => 3245
                 [first_name] => Sally
                 [last_name] => Smith
               )
)

不能没有循环就完成。 - Abdo Adel
@AlanMachado iterator_to_array 内部使用循环。 - Abdo Adel
1
就像我之前说的一样:对于开发者来说并不清晰。它不会声明任何 forwhileforeach。但是,任何需要对多个元素进行数组操作的函数都必须对其进行迭代,因此... - al'ein
我明白了,问题的主题应该是类似于“是否可能在不使用forwhileforeach结构的情况下完成”。 - Abdo Adel
1
为什么需要“修复”数组?难道你不能从一开始就正确地构建数组吗? - dognose
显示剩余3条评论
3个回答

1

试试这个

$a = array (
    array(
        '2135' => array(
            'id' => 2135,
            'first_name' => 'John',
            'last_name' => 'Doe'
        )
    ),
    array (
        '3245' => array(
            'id' => 3245,
            'first_name' => 'Sally',
            'last_name' => 'Smith',
        )
    )
);
$reduce = function ($new = array(), $x) {
    $new[array_keys($x)[0]]=array_values($x)[0];
    return $new;
};

$output = array_reduce($a, $reduce);

// var_dump($output);

请不要让提问者“尝试”某些东西而不解释其工作原理。你的答案可能会被其他正在寻求帮助并阅读此问题的用户阅读,他们可能无法理解为什么你的解决方案适用。 - al'ein
我认为它的工作原理相当明显。它使用array_reduce,并且可以实现OP想要的功能,而不需要使用循环(除非您将array_reduce中隐含的循环计算在内)。我认为与array_filter答案相比,它也稍微更可取,因为它不需要新的全局变量。 - Chris Lear
为什么你这么生气?我并没有说你的答案是错误的,也没有让你代表我撤回它,我只是(礼貌地)建议你在代码中提供一些简要的解释。这是社区惯例而已。 - al'ein
我认为我们有可能积累误解。我并不生气,也没有把你的话理解成说我错了或者应该撤回我的评论。我看到你提供了一个同样可行的替代答案,我现在会点赞它:)。但是我不会添加任何解释,因为我真的想不出还有什么需要补充的。任何人都可以谷歌array_reduce,这就是所有需要的解释。 - Chris Lear
好的,那很有道理。如果我误解了你的意思,对不起 :) - al'ein

1
翻译:简短的(有注释的)回答:
<?php
// simulate array
$arr = [['2135' => ['id' => 2135,'first_name' => 'John','last_name' => 'Doe']],
        ['3245' => ['id' => 3245,'first_name' => 'Sally','last_name' => 'Smith']]];

// new indexed array
$newArr = [];

array_filter($arr, function($val) {     // array_filter checks if are arrays, 
    global $newArr;                     // then use its index as key to its val.
    return !is_array($val) ?: $newArr[key($val)] = $val[key($val)];
    });

echo '<pre>';
print_r($newArr);

// You could respect your data struct and use 'id' field to name keys as well.

输出:

Array
(
    [2135] => Array
        (
            [id] => 2135
            [first_name] => John
            [last_name] => Doe
        )

    [3245] => Array
        (
            [id] => 3245
            [first_name] => Sally
            [last_name] => Smith
        )

)

0

没有循环会很困难,但是有循环的解决方案是:

$file_array = array();
foreach($array_name as $row =>$value){
    foreach ($value as $row1 =>$value1){
        if(in_array($value1, $file_array)){
        }
        else{
        $file_array[] =$value1;
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接