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

4

5 に答える 5

1

必要なキーが 3 つだけの場合:

$newArray = array(
    "api" => $oldArray["api"],
    "class" => $oldArray["class"],
    "version" => $oldArray["version"]
);
于 2012-05-08T04:08:28.283 に答える
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

于 2012-05-08T04:12:42.180 に答える
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]);
}

これを行うためのより短い方法がありますが、これがどのように機能するかを理解できると思います。

編集 - ここに短い方法があります

$keys = array(1, 5);
$new = array_intersect_key($old, array_flip($keys)));
$old = array_diff_key($old, array_flip($keys)));
于 2012-05-08T04:06:31.590 に答える
0

配列の一部を「スライス」できるarray_slice()があります。その部分は、単一の要素または要素の範囲です。基本的に、スライス関数を使用すると、substr() を使用して文字列をハックして切り刻むことができるように、配列をハックして切り刻むことができます。

于 2012-05-08T04:05:07.343 に答える
0

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

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

次に、 aを実行しvar_dump( $new_array);て、目的の出力が含まれているかどうかを確認します。

于 2012-05-08T04:09:38.213 に答える