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

时间:2018-06-07 10:26:58

标签: 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 + $newString;
        $newMap[$newKey] = $value;
    }

我觉得我应该能够使用array_map()array_walk()完成此任务,并且它会更有效率,但我似乎无法使其正常工作。

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

3 个答案:

答案 0 :(得分:0)

如果要修改数组值,可以使用array_map(注意这里使用的匿名函数,可以从PHP 7获得)

使用array_map

修改数组值
$array = array(
  "k1" => "1",  
  "k2" => "2", 
  "k3" => "3",
);

$mapFunc = function($item) {
  return $item . '_';
};

$newArray = array_map($mapFunc, $array);

var_dump($newArray);

结果:

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

如果要修改数组键或值,可以使用array_reduce

使用array_reduce

修改数组键
$array = array(
  "k1" => "1",  
  "k2" => "2", 
  "k3" => "3",
);

$reduceFunc = function($carry, $key)  use ($array) {
  $carry[$key . '_'] = $array[$key];
  return $carry;
};

$newArray = array_reduce(
  $array,
  $reduceFunc,
  []
);

var_dump($newArray);

结果:

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

但是从我的观点来看,这是编程的功能风格,这对于php来说并不典型,所以我认为你的foreach方法更好。

答案 1 :(得分:-1)

尝试此代码,此代码包含array_walk()。

  $newMap = [];
  array_walk($oldMap, function ($value,$key) use (&$newMap) { 
    $newkey = $key + $value + 'blah blah blah';  
    $newMap[$newkey] = $value;
  });

如果您使用字符串作为'blah blah blah',则将“ + ”(加号)替换为“”(点)。

答案 2 :(得分:-1)

你可以这样试试,

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