2012-05-08 4 views
3

배열을 가져 와서 키의 일부를 잘라내어 (순서가 아님) 원하는대로 배열에서 새 배열을 만들고 싶습니다.새로운 배열을 기존 배열에서 새로운 배열로 자른 새 배열을 만듭니다.

나는 array_shift() 함수를 사용하여이를 수행했지만 다음 키를 건너 뛰고 다시 array_shift를 수행해야하는 시점에 이르렀습니다.

어떻게 논리적으로이 문제를 해결할 수 있습니까?

내 배열은

Array 
(
    [api] => Array 
     (
      [0] => system 
      [1] => assets 
      [2] => theme 
      [3] => resources 
      [4] => api 
      [5] => xml 
      [6] => json 
      [7] => jsonp 
      [8] => request 
     ) 

    [class] => Array 
     (
      [name] => authentication 
      [abbr] => auth 
     ) 

    [directories] => Array 
     (
      [application] => application 
      [mvc] => Array 
       (
        [model] => model 
        [view] => view 
        [controller] => controller 
       ) 

      [assets] => Array 
       (
        [folder] => assets 
        [css] => css 
        [img] => img 
        [js] => js 
       ) 

      [config] => config 
     ) 

    [smarty] => Array 
     (
      [security] => on 
      [delimiter] => Array 
       (
        [left] => {! 
        [right] => !} 
       ) 

      [template] => Array 
       (
        [header] => header 
        [footer] => footer 
        [extension] => tpl 
       ) 

     ) 

    [version] => Array 
     (
      [component] => Array 
       (
        [0] => Array 
         (
          [name] => CMS 
          [version] => 1.0 
         ) 

        [1] => Array 
         (
          [name] => TinyMCE jQuery Package 
          [version] => 3.5 
         ) 

        [2] => Array 
         (
          [name] => jQuery 
          [version] => 1.7.2 
         ) 

       ) 

      ) 
) 

나는 그들이 키에서 새 배열을 만들 필요가 : api, class, version

+0

당신이 우리에게 예를 제공 할 수 있습니다. 복용하고있는 요소와 떠나는 요소를 결정하는 기준이 있습니까? – Sampson

+0

코드의 구체적인 예/부분을 게시하면 의미있는 솔루션을 제공하는 데 도움이됩니다. – ccKep

+0

언급 한 배열에서 무엇을 복사 하시겠습니까? – ccKep

답변

1

하나의 배열에서 다른 배열로 이동하려는 명시적인 키 목록을 만듭니다. 그 목록을 뒤집고 하나에서 끌어 당겨 다른 것을 추가하십시오. 그런 다음 원래 배열에서 이전 복사본을 제거 :

// Original Array, and empty Array 
$array = array('api' => 1, 'class' => 2, 'fizz' => 3, 'buzz' => 4); 
$newAr = array(); 

// For each key we'd like to keep 
foreach (array('api', 'class') as $key) { 
    // (Re)move the value from the original array to our new array 
    $newAr[$key] = $array[$key]; unset($array[$key]); 
} 

// Show the contents of the new array 
print_r($newAr); 

이제 온라인을 시도해보십시오 http://codepad.org/7iYG4iVB

0

배열의 일부에서 '조각'을 할 수 array_slice()가있다. 그 부분은 단일 요소 또는 요소 범위 일 수 있습니다. 기본적으로 슬라이스 함수를 사용하면 substr()과 같은 배열에서 해킹을 수행하여 해킹을 수행 할 수 있습니다.

+0

내가 원하는 것을 가까이에있을 것 같다, 그냥'array_splice'를 사용하는 방법에 대한 논리를 이해하지 못한다. – Eli

0
$keys = array(1, 5, 'foo'); 

$new = array(); 
foreach ($keys as $key) { 
    $new[$key] = $old[$key]; 
    // or maybe just $new[] = $old[$key]; 
    unset($old[$key]); 
} 

이 작업을 수행하는 짧은 방법이 있지만 어떻게 작동하는지 이해할 수 있다고 생각합니다.

편집 - 그냥 그 3 키가 있다면 여기에 당신이 필요로하는 짧은 방법

$keys = array(1, 5); 
$new = array_intersect_key($old, array_flip($keys))); 
$old = array_diff_key($old, array_flip($keys))); 
1

입니다 :

$new_array = array( 
    'api' => $old_array['api'], 
    'class' => $old_array['class'], 
    'version' => $old_array['version'] 
); 

그런 다음에 var_dump($new_array);을 수행

$newArray = array(
    "api" => $oldArray["api"], 
    "class" => $oldArray["class"], 
    "version" => $oldArray["version"] 
); 
+1

그러나 기존 배열을 잘라내야 만한다. – Eli

+0

'$ oldArray'가 기존 배열이 될 것이다. . '$ newArray'는 3 개의 키와 이전 배열의 내용만을 포함합니다. – ccKep

+1

Downvoted? 설명해 주겠다고? – ccKep

0

이 너무 간단한데 원하는 출력이 들어 있는지 확인하십시오.

+0

@Downvoter - 의견이 있으십니까? – nickb

+0

11까지 올라갑니다! – ccKep

관련 문제