如果您要使用一组键,则使用 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; }
我不认为它比第一个代码更有效,但它提供了更多的控制,并且不会出现数组长度的问题.
如果您要使用一组键,则使用 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.
不是很好的XML.
是更好的XML,因为在intrepreted时,重复的名称无关紧要,因为它们都是数字偏移的,如下所示:
section => { 0 => [ foo , {} ] 1 => [ foo , {} ] 2 => [ bar , {} ] 3 => [ foo , {} ] }
我将此添加为另一个问题的答案,似乎很相关。希望可以帮助需要更改数组中键值的人。对php使用内置函数。
$inputArray = array('app_test' => 'test', 'app_two' => 'two'); /** * Used to remap keys of an array by removing the prefix passed in * * Example: * $inputArray = array('app_test' => 'test', 'app_two' => 'two'); * $keys = array_keys($inputArray); * array_walk($keys, 'removePrefix', 'app_'); * $remappedArray = array_combine($keys, $inputArray); * * @param $value - key value to replace, should be from array_keys * @param $omit - unused, needed for prefix call * @param $prefix - prefix to string replace in keys */ function removePrefix(&$value, $omit, $prefix) { $value = str_replace($prefix, '', $value); } // first get all the keys to remap $keys = array_keys($inputArray); // perform internal iteration with prefix passed into walk function for dynamic replace of key array_walk($keys, 'removePrefix', 'app_'); // combine the rewritten keys and overwrite the originals $remappedArray = array_combine($keys, $inputArray); // see full output of comparison var_dump($inputArray); var_dump($remappedArray);
输出:
array(2) { 'attr_test' => string(4) "test" 'attr_two' => string(3) "two" } array(2) { 'test' => string(4) "test" 'two' => string(3) "two" }