2012-05-08 9 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 
         ) 

       ) 

      ) 
) 

私は彼らのキーから新しい配列を作成する必要があります。apiclassversion

+0

はあなたが私たちの例を与えることができます。どの要素を取っているのか、どの要素を残しているのかを決める基準がありますか? – Sampson

+0

コードのいくつかの具体的な例/部分を投稿してください。これは意味のある解決策を提供するのに役立ちます。 – ccKep

+0

上記の配列から何をコピーしますか? – ccKep

答えて

1

あるアレイから別のアレイに移動する明示的なキーのリストを作成します。そのリストを巡回し、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

だ:

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

既存の配列から切り捨てる必要があります – Eli

+0

' $ oldArray'はあなたの既存の配列。 '$ newArray'は3つのキーと古い配列の内容のみを含みます。 – ccKep

+1

Downvoted?説明するケア? – ccKep

0

これは単純すぎるようだ:

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

その後にvar_dump($new_array);を行います希望の出力が含まれているかどうかを確認してください。

+0

@Downvoter - すべてのコメント? – nickb

+0

11まで行く! – ccKep

関連する問題