2010-08-20 5 views
4

개요 요약 PHP 어레이와 다른 두 요소 : 또한 x 제거 x의 위치에 배열대체물

{a, b, ..., w, x, ..., z} 

삽입 여러 요소 {m, n, ..., r}을 감안할. 최종 배열 :

{a, b, ..., w, m, n, ..., r, ..., z} 

이 배열이 요소 'monwa를'존재하는 경우는 새로운 배열을 반환합니다

$return_arr = array(
        'saa'=>'A2223', 
        'asab'=>'asB', 
        'wqed'=>'D234', 
        'wqasee'=>'Esd', 
        'wqewf'=>'Ffds', 
        'monwa'=>'monwaaas'//* 
        ); 

반환 배열을 가지고 =이> '새로운 배열이됩니다 monwaaas'.And 우리가있는 경우 $ return_arr =>는 new_array가해야 우리가 예를
에 대한 을 발견 요소의 다음 순서를 수

(add two more element ('hi'=>'HI','hello'=>'HELLO') 

$new_array = array(
        'saa'=>'A2223', 
        'asab'=>'asB', 
        'wqed'=>'D234', 
        'wqasee'=>'Esd', 
        'wqewf'=>'Ffds', 
        'hi'=>'HI', 
        'hello'=>'HELLO' 
        ); 

그리고

$return_arr = array(
        'saa'=>'A2223', 
        'asab'=>'asB', 
        'monwa'=>'monwaaas',//* 
        'wqed'=>'D234', 
        'wqasee'=>'Esd', 
        'wqewf'=>'Ffds' 
        ); 

경우 new_array가 있어야한다 :

$new_array = array(
        'saa'=>'A2223', 
        'asab'=>'asB', 
        'hi'=>'HI', 
        'hello'=>'HELLO', 
        'wqed'=>'D234', 
        'wqasee'=>'Esd', 
        'wqewf'=>'Ffds' 
        ); 

등등 ...

누구가이 작업을 수행하는 방법을 알고?

감사

답변

1

Example on an online interpreter.

1) 요소의 위치를 ​​검색합니다. 2) 요소를 제거하고 3) 이전 위치에 삽입합니다. 이러한 기능으로

$pos = array_search_pos($arr, 'monwa'); 
unset($arr['monwa']); 
$result = array_insert_at($arr, $pos, array("key1"=>"value1", "key2"=>"value2")); 

:

function array_search_pos($arr, $key) { 
    $i = 0; 
    foreach ($arr as $k => $v) { 
     if ("$k" == "$key") 
      return $i; 
     $i++; 
    } 
    return false; 
} 

function array_insert_at($array, $pos, $values) { 
    return array_slice($array, 0, $pos, true) + 
     $values + 
     array_slice($array, $pos, count($array)-$pos, true); 
} 
+0

$의 return_arr = 배열 ​​( 'SAA'=> 'A2223', 'asab'=> 'ASB', 'wqed'=> 'D234', '시도하십시오 wqasee '=>'Esd ', 'monwa '=>'monwaaas '// 여기에 문제가 있습니다 'wqewf '=>'Ffds ' ); – kn3l

+0

시작과 끝에서 'monwa'=> 'monwaaas'를 넣으면 문제가 발생합니다. – kn3l

+0

@python 시작과 끝에서 작동합니다. 당신이 "끝난 후에"무엇을 의미하는지 모르겠습니다. – Artefacto

-1

당신은 이런 식으로 할 수 있습니다.

foreach($new_array as $key=>$value) 
{ 
     if($key == 'monwa' && $value =='monwaaas') 
     { 
       foreach($element_array as $key1=>$value1) 
       { 
         $return_arrat[$key1] = $value1; 
       } 
     } 
     else 
     { 
       $return_array[$key] = $value 
     } 
} 
+0

위치를 유지하지 않습니다. – Artefacto

0

@Artefacto 이것은 내가 확신 같은 위치를 유지합니다.

$ return_array는 $ new_array의 위치로 제출됩니다.

$new_array = array(
        'saa'=>'A2223', 
        'asab'=>'asB', 
        'monwa'=>'monwaaas',//* 
        'wqed'=>'D234', 
        'wqasee'=>'Esd', 
        'wqewf'=>'Ffds' 
        ); 

$element_array = array('hi'=>'HI','hello'=>'HELLO'); 

foreach($new_array as $key=>$value) 
{ 
     if($key == 'monwa' && $value =='monwaaas') 
     { 
       foreach($element_array as $key1=>$value1) 
       { 
        $return_array[$key1] = $value1; 
      } 
     } 
    else 
    { 
       $return_array[$key] = $value; 
    } 
} 

echo "<pre>"; 
print_r($return_array); 
echo "<pre>"; 

+0

이것은 주석이어야합니다. 그리고 배열 키가 아니라 위치를 의미합니다. 예 :배열 ('b'=> 2, 'a'=> 1)'대 배열 ('a'=> 1, 'b'=> 2)' – Artefacto

+0

네, 맞아 Artefacto – kn3l

+0

당신과 논쟁해서 죄송합니다. 재능있는 사람들. 하지만 내 코드를 확인했다. 큰 배열에서는 효율적이지 않지만 내 대답은 정확하다고 생각합니다. 이것을 시도하십시오. –

관련 문제