PHP 更改数组键
2022-08-30 11:17:30
有没有办法将所有数字键更改为“Name”而不循环数组(所以是php函数)?
[
0 => 'blabla',
1 => 'blabla',
2 => 'blblll',
// etc ...
]
有没有办法将所有数字键更改为“Name”而不循环数组(所以是php函数)?
[
0 => 'blabla',
1 => 'blabla',
2 => 'blblll',
// etc ...
]
如果您有要使用的密钥数组,请使用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;
}
我不认为它比第一个代码更有效,但它提供了更多的控制,并且数组的长度不会有问题。
不,没有,对于初学者来说,不可能有一个数组,其中的元素共享相同的键
$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 , {} ]
}