2010-03-02 8 views
1

나는이 다음과 같은 배열 : 나는 배열 (추가 콜론 주)로 끝날 수 있도록/패드 키를 변경하려면PHP : 변경 또는 패딩 배열의 키 이름

$person = array('first_name' => 'Fred', 'last_name' => 'Flintstone'); 

:

$person = array('::first_name::' => 'Fred', '::last_name::' => 'Flintstone'); 

은 어떤 이유로 나는이

+0

당신이 설명 할 수 있을까요? 당신이 잘못된 방향에서 문제에 접근하고 있다는 느낌이 들기 때문에. – Gordon

+0

사용자 지정 배열을 템플릿에서 바꿀 수있게하고 있습니다. 템플릿에는 :: first_name :: 과 같은 태그가 포함될 수 있습니다. 콜론이 포함 된 것보다 "일반 영어"키 배열을 제공하는 것이 더 읽기 쉽습니다. – k00k

+0

나는 % NAME % 대신에 : – Layke

답변

4

내가 가장 간단한 방법을 모르는 가장 간단한 방법에 빈 그리기 해요,하지만 내 머리 위로 떨어져 가장 빠른 방법을 통해 단지 반복하는 것입니다. 당신이 교체되기 때문에

foreach($array as $key => $val) { 
    $array["..$key.."] = $val; 
    unset($array[$key]); 
} 

나는이 작업을 수행 할 가정

foreach($person as $key=>$value) { 
$newArray['::' . $key .'::'] = $value; 

} 

나는 당신도 단지 새로운 배열을 만들지 않고, Laykes 솔루션에서

function tokenize($person) 
{ 
    foreach($person as $key=>$value) { 
    $newArray['::' . $key .'::'] = $value;  
    } 
    return $newArray; 
} 

$person = array('first_name' => 'Fred', 'last_name' ='Flintstone'); 
$newPerson = array_map("tokenize", $person); 
print_r($newPerson); 
+0

'tokenize' 함수가 작동하지 않습니다.'array_map'은 $ person 배열 자체의 요소가 아닌 $ person 배열의 요소를 전달합니다. – Gordon

+0

아 좋아. 나는 그 사실을 몰랐다. array_values ​​()뿐만 아니라 항상 array_keys()를 사용할 수 있습니다. 의견에 감사드립니다. – Layke

1

변화를 할 수있는 것 같아요 다음과 같이 템플릿의 자리 표시 자 :

$template = str_replace(array_keys($person), $person, $template); 

그렇다면 $ person을 두 번 반복한다는 것을 기억하십시오. 한 번은 키를 변경하고 다른 한 번은 키를 가져옵니다. 그러므로 array_keys()에 대한 호출을 패딩 된 값으로 키를 반환하는 함수로 바꾸는 것이 더 효율적입니다. 당신이이 방법 :

을 수행하지 않는 경우

foreach($person as $key => $val) { 
    str_replace("::$key::", $val, $template); 
} 

그러나이 대답을 무시 : 다음 다시

function array_keys_padded(array $array, $padding) { 
    $keys = array(); 
    while($key = key($array)) { 
     $keys[] = $padding . $key . $padding; 
     next($array); 
    } 
    return $keys; 
} 
// Usage 
$template = str_replace(array_keys_padded($person, '::'), $person, $template); 

그러나 같은, 당신은 단지뿐만 아니라 간단한 반복 함께 할 수 호기심에서, 배열을 제공하는 사용자는 실제로 입니까?

+0

사용자는 배열을 태그 목록 형태로 제공합니다. stackoverflow 질문에 태그를 넣는 것과 같습니다. – k00k

1

당신도 수행 할 수 있습니다

<?php 
$person = array('first_name' => 'Fred', 'last_name' =>'Flintstone'); 

$keys = array_keys($person); // array of keys. 

for($i=0;$i<count($person);$i++) { 
    $keys[$i] = "::$keys[$i]::"; // change each key. 
} 
// recreate array using changed keys. 
$person = array_combine($keys,array_values($person)); 

var_dump($person); 
?> 

출력 : 당신이 필요로하는 이유

array(2) { 
    ["::first_name::"]=> 
    string(4) "Fred" 
    ["::last_name::"]=> 
    string(10) "Flintstone" 
}