Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP数组中,如何基于数组值修改字符串键?_Php_Arrays - Fatal编程技术网

在PHP数组中,如何基于数组值修改字符串键?

在PHP数组中,如何基于数组值修改字符串键?,php,arrays,Php,Arrays,目前,我正在对数组进行foreach,并在执行时创建一个新数组。例如: $newMap = []; foreach ($oldMap as $key => $value) { // Apply some complex logic to $value to extract a string $newString = my_value_processor($value); $newkey = $key + $newStrin

目前,我正在对数组进行foreach,并在执行时创建一个新数组。例如:

    $newMap = [];
    foreach ($oldMap as $key => $value) {

        // Apply some complex logic to $value to extract a string
        $newString = my_value_processor($value);

        $newkey = $key + $newString;
        $newMap[$newKey] = $value;
    }
我有一种感觉,我应该能够用array\u map或array\u walk来完成这项工作,而且它会更有效,但我似乎无法让它工作


编辑:在上面的示例中,代码被简化为显示$newKey依赖于$value。$value是一个子数组,我对它应用了一些复杂的逻辑来提取字符串。我已经更新了上面的示例来演示这一点。

如果您想修改数组值,可以使用array\u map。请注意此处使用的匿名函数,可从PHP7获得

使用数组映射修改数组值

结果:

array(3) {
  ["k1"]=>
  string(2) "1_"
  ["k2"]=>
  string(2) "2_"
  ["k3"]=>
  string(2) "3_"
}
array(3) {
  ["1_"]=>
  string(1) "1"
  ["2_"]=>
  string(1) "2"
  ["3_"]=>
  string(1) "3"
}
如果要修改数组键或值或两者,可以使用array\u reduce

使用array\u reduce修改数组键

结果:

array(3) {
  ["k1"]=>
  string(2) "1_"
  ["k2"]=>
  string(2) "2_"
  ["k3"]=>
  string(2) "3_"
}
array(3) {
  ["1_"]=>
  string(1) "1"
  ["2_"]=>
  string(1) "2"
  ["3_"]=>
  string(1) "3"
}

但从我的观点来看,这是编程的函数式风格,这不是php的典型风格,所以我认为您的foreach方法更好

试试这段代码,这段代码带有array\u walk

  $newMap = [];
  array_walk($oldMap, function ($value,$key) use (&$newMap) { 
    $newkey = $key + $value + 'blah blah blah';  
    $newMap[$newkey] = $value;
  });
如果您将字符串用作'blah blah blah',则将+plus替换为.dot。

您可以这样尝试

$oldMap = ['test12' => 'test'];
foreach($oldMap as $key => $value)
    {
        $oldMap[$key.'_'.$value.'blah blah'] = $value;
        unset($oldMap[$key]);
    }
var_dump($oldMap);

IIRC,foreach比数组函数快得多。让我找一个来源来支持这一点。编辑找到我的源:。这取决于具体的操作,但如果您没有函数式编程方面的背景,foreach总是更快,可能更容易阅读。可能与否重复,您无法在现有的Php数组中变异键。foreach$old as$k=>$v$new[$k.''.'$v]=$v;举个例子,不是很难吗?不能使用+运算符合并字符串,请使用。对于连接,他不想更改值。谢谢,有一个add array\u reduce,允许修改键