2011-12-23 11 views
14

मैं सरणी कुंजी में एक उपसर्ग को हटाने का प्रयास करता हूं और हर प्रयास विफल हो रहा है।सरणी कुंजियों में उपसर्ग को कैसे हटाएं

होने:: क्या मैं हासिल करना चाहते हैं के लिए है Array ([attr_Size] => 3 [attr_Colour] => 7)

प्राप्त करने के लिए: Array ([Size] => 3 [Colour] => 7)

आपका मदद की बहुत सराहना की जाएगी ...

+6

तो आप बस 'attr_' अपने सरणी कुंजी से निकालना चाहते हैं? 'Implode()' के साथ क्या करना है? क्या 'attr_my_prop'' my_prop', 'prop' या कुछ और बनना चाहिए? सबसे महत्वपूर्ण बात, क्यों? क्या हम आपका "असफल" कोड देख सकते हैं? –

उत्तर

3

तरीकों में से एक प्राप्त करने के लिए: Array ([Size] => 3 [Colour] => 7) से अपने 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; 

} 

अगर आपको लगता है कुंजी में एक से अधिक अंडरस्कोर वहाँ हो जाएगा सिर्फ पहली पंक्ति की जगह मैं list($dummy, $newkey) = explode('attr_', $key);

+0

यह वास्तव में काम करता है। बहुत बहुत धन्यवाद। – user1113177

+2

अधिक बेहतर उत्तर के लिए नीचे देखें। –

+0

यह अनुमोदित उत्तर आईएमओ नहीं होना चाहिए। अधिक उचित array_keys() फ़ंक्शन का उपयोग करने के लिए नीचे देखें। यह इस जवाब में लूप से बचाता है। क्षमा करें -1 मुझसे वोट नीचे। – Ligemer

4

यदि मैं आपका प्रश्न समझ गया, तो आपको implode() का उपयोग करने के लिए आपको क्या चाहिए, पाने के लिए nside foreachach।

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

शानदार! काम करता है। अब यह बहुत आसान लग रहा है। बहुत बहुत धन्यवाद। – user1113177

+1

आपका स्वागत है। कृपया जिन उत्तरों के साथ आप संतुष्ट हैं उन्हें ऊपर उठाने/स्वीकार करने के लिए मत भूलना :) –

0

यहां चबाने के लिए कुछ और है जिसे आपके एप्लिकेशन में कई एरे के लिए पुन: उपयोग किया जा सकता है जिसमें विभिन्न कुंजी उपसर्ग हैं। यह उपयोगी होगा यदि आपके पास रीडैप प्रीफिक्स्ड कुंजियां रीमेप या उस प्रकृति के कुछ हैं।

$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); 

आउटपुट:

array(2) { 
    'attr_test' => 
    string(4) "test" 
    'attr_two' => 
    string(3) "two" 
} 
array(2) { 
    'test' => 
    string(4) "test" 
    'two' => 
    string(3) "two" 
} 
संबंधित मुद्दे