2011-12-23 28 views
14

Tôi cố gắng loại bỏ tiền tố trong các khóa mảng và mọi nỗ lực không thành công. Những gì tôi muốn đạt được là:Cách xóa tiền tố trong các khóa mảng

Có: Array ([attr_Size] => 3 [attr_Colour] => 7)

Để Nhận: Array ([Size] => 3 [Colour] => 7)

sự giúp đỡ của bạn sẽ được nhiều đánh giá cao ...

+6

Vì vậy, bạn chỉ muốn loại bỏ 'attr_' từ khóa mảng của bạn? Điều này có liên quan gì với 'implode()'? 'Attr_my_prop' có nên trở thành' my_prop', 'prop' hay cái gì khác không? Quan trọng nhất, tại sao? Chúng tôi có thể thấy mã "không thành công" của bạn không? –

Trả lời

3

Một trong những cách để có được: Array ([Size] => 3 [Colour] => 7) Từ của bạn Having: Array ([attr_Size] => 3 [attr_Colour] => 7)

$new_arr = array(); 
foreach($Your_arr as $key => $value) { 

list($dummy, $newkey) = explode('_', $key); 
$new_arr[$newkey] = $value; 

} 

Nếu bạn nghĩ rằng sẽ có nhiều dấu gạch dưới trong các phím thay thế dòng đầu tiên tôi nside foreach with list($dummy, $newkey) = explode('attr_', $key);

+0

Điều này hoạt động thực sự. Cảm ơn rất nhiều. – user1113177

+2

Xem bên dưới để có câu trả lời thích hợp hơn. –

+0

Đây không phải là câu trả lời được IMO phê duyệt. Xem dưới đây để sử dụng hàm array_keys() phù hợp hơn. Nó tránh vòng lặp trong câu trả lời này. Xin lỗi -1 xuống bỏ phiếu từ tôi. – Ligemer

4

Nếu tôi hiểu câu hỏi của bạn, bạn không phải sử dụng implode() để có được những gì bạn muốn.

define(PREFIX, 'attr_'); 

$array = array('attr_Size' => 3, 'attr_Colour' => 7); 

$prefixLength = strlen(PREFIX); 

foreach($array as $key => $value) 
{ 
    if (substr($key, 0, $prefixLength) === PREFIX) 
    { 
    $newKey = substr($key, $prefixLength); 
    $array[$newKey] = $value; 
    unset($array[$key]); 
    } 
} 

print_r($array); // shows: Array ([Size] => 3 [Colour] => 7) 
+0

Rực rỡ! Công trinh. Bây giờ nó trông rất đơn giản. Cảm ơn rất nhiều. – user1113177

+1

Bạn được chào đón. Xin đừng quên upvote/chấp nhận câu trả lời bạn đang satified với :) –

0

Dưới đây là một số thứ khác để nhai trên đó có thể được sử dụng lại cho nhiều mảng trong ứng dụng của bạn có các tiền tố khóa khác nhau. Điều này sẽ hữu ích nếu bạn có Redis tiền tố để remap hoặc một cái gì đó của bản chất đó.

$inputArray = array('attr_test' => 'test', 'attr_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', 'attr_'); 

// combine the rewritten keys and overwrite the originals 
$remappedArray = array_combine($keys, $inputArray); 

// see full output of comparison 
var_dump($inputArray); 
var_dump($remappedArray); 

Output:

array(2) { 
    'attr_test' => 
    string(4) "test" 
    'attr_two' => 
    string(3) "two" 
} 
array(2) { 
    'test' => 
    string(4) "test" 
    'two' => 
    string(3) "two" 
} 
Các vấn đề liên quan