当前位置:  开发笔记 > 编程语言 > 正文

PHP更改数组键

如何解决《PHP更改数组键》经验,为你挑选了3个好方法。

如果您要使用一组键,则使用 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;
}

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



1> Eric Goodwin..:

如果您要使用一组键,则使用 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> Kent Fredric..:

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

$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 , {} ] 
}



3> Ligemer..:

我将此添加为另一个问题的答案,似乎很相关。希望可以帮助需要更改数组中键值的人。对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"
}

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有