2010-05-12 2 views
1

일부 배열 키의 이름을 변경 한 데이터 배열로 작업하고 있지만 데이터가 기본적으로 동일하게 유지되기를 원합니다 ... 기본적으로 배열에있는 데이터를 유지하려고합니다. DB에 저장되어 있지만 배열 키 이름을 업데이트하려고합니다. 배열에 대한 str_replace() 및 strpos()?

는 이전에 배열이처럼 보였다없는 것 :

$var_opts['services'] = array('foo-1', 'foo-2', 'foo-3', 'foo-4'); 이제 배열의 키는 더 이상 "foo는"로 시작하지만, 오히려 "바"로 대신. 그렇다면 어떻게 배열 변수를 업데이트하여 "foos"를 제거하고 대신 "bars"로 대체 할 수 있습니까? 그래서 같이

: $var_opts['services'] = array('bar-1', 'bar-2', 'bar-3', 'bar-4');

이미 if(isset($var_opts['services']['foo-1'])) { unset($var_opts['services']['foo-1']); }를 사용하고 난 그냥 바 각 foo를 교체하는 방법을 알아낼 필요가 ..., FOOS를 제거합니다.

나는 전체 배열에서 str_replace를 사용할 것이라고 생각했지만, 당황 스럽지만 문자열에서만 작동하고 배열에서는 작동하지 않는다.

+1

사이드 메모를 변경하려면 : 사용자가 제공 한 코드, 모든 'foo는-X가없는 배열 $ var_opts ['서비스 ']와 '문자열을 키로 사용하지만 값은 실제로 0, 1, 2, ... –

답변

1

아이디어 :

  1. 당신이 수정 된 사람과 기존의 키를 교체
  2. 을 선택로 각각 수정 모든 배열 키
  3. 의 목록을 가져옵니다

코드 :

$keys = array_keys($arr); 
$values = array_values($arr); 
$new_keys = str_replace('foo', 'bar', $keys); 
$arr = array_combine($new_keys, $values); 

화 이것은 실제로 원래 배열과 동일한 값을 가지지 만 키가 변경된 새로운 배열을 생성합니다.

편집 : 아래의 카밀의 의견에 따라 업데이트 됨.

+0

하하, 똑똑! 고마워요, 매우 편리합니다. – Josh

+1

멋진 기법! 또한 문자열 배열을 세 번째 인수로 전달하여 루프없이 배열 값에 대해 str_replace()를 수행 할 수 있습니다. str_replace ('foo', 'bar', $ keys); 따라서 당신은 oneliner를 가질 수 있습니다. ;-) –

+0

@Kamil 멋진 캐치,이 대답을 사용하도록 업데이 트하겠습니다. – Jon

0

$ var_opts [ 'services'] = array ('foo-1', 'foo-2', 'foo-3', 'foo-4');

var_dump($var_opts['services']); 

foreach($var_opts['services'] as &$val) { 
    $val = str_replace('foo', 'bar', $val); 
} 
unset($val); 

var_dump($var_opts['services']); 

하거나 실제 키

$var_opts['services'] = array('foo-1' => 1, 'foo-2' => 2, 'foo-3' => 3, 'foo-4' => 4); 
var_dump($var_opts['services']); 
foreach($var_opts['services'] as $i => $val) { 
    unset($var_opts['services'][$i]); 
    $i = str_replace('foo', 'bar', $i); 
    $var_opts['services'][$i] = $val; 
} 

var_dump($var_opts['services']);