2017-04-21 54 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; 
}