2017-04-21 55 views
2

这是我的数组:取代PHP数组的所有键

['apple']['some code'] 
['beta']['other code'] 
['cat']['other code 2 '] 

我怎么能代替所有的“E”字母“!”在键名,并保留值 ,这样我会得到类似的东西

['appl!']['some code'] 
['b!ta']['other code'] 
['cat']['other code 2 '] 

我发现这一点,但因为我没有相同的名称所有密钥我不能用它

$tags = array_map(function($tag) { 
    return array(
     'name' => $tag['name'], 
     'value' => $tag['url'] 
    ); 
}, $tags); 
+2

你的阵列不被清除,是多维或者关联数组,请更新您的实际阵列 –

回答

3

我希望你的阵列看起来像这样: -

Array 
(
    [apple] => some code 
    [beta] => other code 
    [cat] => other code 2 
) 

如果是的话,那么你可以像下面: -

$next_array = array(); 
foreach ($array as $key=>$val){ 
    $next_array[str_replace('e','!',$key)] = $val; 
} 
echo "<pre/>";print_r($next_array); 

输出: - https://eval.in/780144

0

如果你有这样的:

$firstArray = array('apple'=>'some code','beta'=>'other code','cat'=>'other code 2 '); 

你可以试试这个:

$keys  = array_keys($firstArray); 
$outputArray = array(); 
$length  = count($firstArray); 

for($i = 0; $i < $length; $i++) 
{ 
    $key = str_replace("e", "!", $keys[ $i ]); 
    $outputArray[ $key ] = $firstArray[$keys[$i]]; 
} 
+0

更换'$ outputArray [$关键] = $ firstAray [$ i]'和'$ outputArray [$关键] = $ firstArray [$ keys [$ i]]' – user1234

1

这里我们使用的是array_walk,并且通过迭代,我们将密钥中的e替换为!,并将密钥和值放入新数组中。

Try this code snippet here

<?php 
$firstArray = array('apple'=>'some code','beta'=>'other code','cat'=>'other code 2 '); 
$result=array(); 
array_walk($firstArray, function($value,$key) use (&$result) { 
    $result[str_replace("e", "!", $key)]=$value; 
}); 
print_r($result); 
2

您可以array_map真正坚持。这是不是真的实用,但作为证明的概念,这可以这样进行:

$array = array_combine(
    array_map(function ($key) { 
     return str_replace('e', '!', $key); 
    }, array_keys($array)), 
    $array 
); 

我们使用array_keys函数提取键和养活他们array_map。然后我们使用array_combine将键放回原位。

这里是working demo

+0

这是最优雅的解决方案,应该是公认的答案。 – localheinz

0

我们可以迭代array并标记所有有问题的键被改变。检查它是否是字符串的值,如果是,请确保在需要时进行替换。如果它是array而不是字符串,则请递归调用function以获得内部array。解决这些值时,请执行密钥替换并删除错误密钥。在你的情况下通过"e"$old"!"$new。 (未经测试)

function replaceKeyValue(&$arr, $old, $new) { 
    $itemsToRemove = array(); 
    $itemsToAdd = array(); 
    foreach($arr as $key => $value) { 
     if (strpos($key, $old) !== false) { 
      $itemsToRemove[]=$key; 
      $itemsToAdd[]=str_replace($old,$new,$key); 
     } 
     if (is_string($value)) { 
      if (strpos($value, $old) !== false) { 
       $arr[$key] = str_replace($old, $new, $value); 
      } 
     } else if (is_array($value)) { 
      $arr[$key] = replaceKeyValue($arr[$key], $old, $new); 
     } 
    } 
    for ($index = 0; $index < count($itemsToRemove); $index++) { 
     $arr[$itemsToAdd[$index]] = $itemsToRemove[$index]; 
     unset($arr[$itemsToRemove[$index]]); 
    } 
    return $arr; 
}