PHP 更改数组键

php
2022-08-30 11:17:30

有没有办法将所有数字键更改为“Name”而不循环数组(所以是php函数)?

[
    0 => 'blabla',
    1 => 'blabla',
    2 => 'blblll',
    // etc ...
]

答案 1

如果您有要使用的密钥数组,请使用array_combine

给定 $keys = array('a', 'b', 'c', ...) 和你的数组,$list,然后执行以下操作:

$list = array_combine($keys, array_values($list));

列表现在将是数组('a' => 'blabla 1', ...) 等。

您必须使用array_values仅从数组中提取值,而不是旧的数字键。

这很好,看起来很简单,但array_values制作阵列的整个副本,因此您可能会遇到空间问题。我们在这里所做的就是让php为我们做循环,而不是消除循环。我很想做一些更像这样的事情:

foreach ($list as $k => $v) {
   unset ($list[$k]);

   $new_key =  *some logic here*

   $list[$new_key] = $v;
}

我不认为它比第一个代码更有效,但它提供了更多的控制,并且数组的长度不会有问题。


答案 2

不,没有,对于初学者来说,不可能有一个数组,其中的元素共享相同的键

$x =array(); 
$x['foo'] = 'bar' ; 
$x['foo'] = 'baz' ; #replaces 'bar'

其次,如果您只想在数字前面加上前缀,以便

$x[0] --> $x['foo_0']  

在没有循环的情况下,这在计算上是不可信的。目前没有php函数用于“键前缀”任务,最接近的是“提取”,它将在使数字键成为变量之前为数字键添加前缀。

最简单的方法是:

function rekey( $input , $prefix ) { 
    $out = array(); 
    foreach( $input as $i => $v ) { 
        if ( is_numeric( $i ) ) { 
            $out[$prefix . $i] = $v; 
            continue; 
        }
        $out[$i] = $v;
    }
    return $out;
}

此外,在阅读 XMLWriter 用法时,我相信你会以一种糟糕的方式编写 XML。

<section> 
    <foo_0></foo_0>
   <foo_1></foo_1>
   <bar></bar>
   <foo_2></foo_2>
</section>

不是好的XML。

<section> 
   <foo></foo>
   <foo></foo>
   <bar></bar>
   <foo></foo>
</section>

是更好的 XML,因为当插入时,重复的名称并不重要,因为它们在数字上都是偏移的,如下所示:

section => { 
    0 => [ foo , {} ]
    1 => [ foo , {} ]
    2 => [ bar , {} ]
    3 => [ foo , {} ] 
}

推荐