1

私はこの配列を持っています

$arr = array(
    'one' => array(
    'slidertitle' => 'lorem ipsum',
    'sliderlocation' => 'http://localhost/images/1.jpg',
    'sliderdescription' => 'this is a good lorem ipsum image',
    'sliderposition' => 1
    ),
    'two' => array(
    'slidertitle' => 'second slider',
    'sliderlocation' => 'http://localhost/images/2.jpg',
    'sliderdescription' => 'this space was reserved for a link source code here',
    'sliderposition' => 2
    ),
    'six' => array(
    'slidertitle' => 'sixth slider',
    'sliderlocation' => 'http://localhost/images/6.jpg',
    'sliderdescription' => 'this is the sixth slider,like,really!',
    'sliderposition' => 6
    )
);

私はこのように見える必要があります

$arr = array(

     'two' => array(
    'slidertitle' => 'second slider',
    'sliderlocation' => 'http://localhost/images/2.jpg',
    'sliderdescription' => 'this space was reserved for a link source code here',
    'sliderposition' => 2
    ),

    'six' => array(
    'slidertitle' => 'sixth slider',
    'sliderlocation' => 'http://localhost/images/6.jpg',
    'sliderdescription' => 'this is the sixth slider,like,really!',
    'sliderposition' => 6
    ),
      'one' => array(
    'slidertitle' => 'lorem ipsum',
    'sliderlocation' => 'http://localhost/images/1.jpg',
    'sliderdescription' => 'this is a good lorem ipsum image',
    'sliderposition' => 1
    )
);

予想される配列構造を定義し、ダミー配列を導入することで、それを実行しようとしています。次に、配列をチャンクし、各チャンクを配列形式にマージします。最終的にダミーを設定解除する予定で、必要な配列が残っています欲しい順番。

$arrayFormat = array(
   'dummy' => array(
    'slidertitle' => 'xxxx',
    'sliderlocation' => 'xxxxxxx',
    'sliderdescription' => 'xxxxxx',
    'sliderposition' => 0
    )
);
$arrayLength = count($arr);
$afterChunk = array_chunk($arr,$arrayLength);
$one = $afterChunk[0][0];
$two = $afterChunk[0][1];
$mergedArray = array_merge($arrayFormat,$one);
$secondMergedArray = array_merge($mergedArray,$two);
echo '<pre>';
print_r($secondMergedArray);
echo '</pre>';

問題はarray_chunk()、配列のキーが含まれていないため、取得しています

Array (
    [dummy] => Array
        (
            [slidertitle] => xxxx
            [sliderlocation] => xxxxxxx
            [sliderdescription] => xxxxxx
            [sliderposition] => 0
        )

    [slidertitle] => second slider
    [sliderlocation] => http://localhost/images/2.jpg
    [sliderdescription] => this space was reserved for a link source code here
    [sliderposition] => 2 )

print_r($secondMergedArray);配列キーを含めるためにできることarray_chunk()はありますか、またはキーを含む個々の配列を取得するのに役立つ他の配列関数はありますか?

4

2 に答える 2

2

要素を並べ替える方法に関して、あなたが何を望んでいるのかを伝えるのは本当に難しいです。あなたは質問であまり明確ではありませんでした。配列には、必要な順序がわかっているものが必要です。

それが何であるかについての手がかりがない場合、配列キーの順序を手動で指定する必要があると仮定します。

したがって、現在の配列はarray('one'=>... , 'two'=>... , 'six'=>... )であり、これらのキーを手動で指定する順序で並べ替えたいとします。

uksort()解決策は、ソート順を指定する別の配列とともに関数を使用することです。

$arr = ... //input array as specified in the question
$sortOrder = array('two','one','six');

uksort($arr, function ($a, $b) use ($sortOrder) {
    $sortMe = array_flip($sortOrder);
    if ($sortMe[$a] == $sortMe[$b]) { return 0; }
    return ($sortMe[$a] < $sortMe[$b]) ? -1 : 1;
});

print_r($arr);

配列を「2」、「1」、「6」の順に出力します。$sortOrder必要に応じて配列を変更します。

それが役立つことを願っています。

注:上記の構文は、PHP 5.3 以降でのみ機能します。(古いバージョンを使用している場合は、アップグレードする必要があります)

于 2012-09-18T16:37:01.260 に答える
1

uksort()多次元配列のカスタムオーダーに使用

http://php.net/manual/en/function.uksort.php

于 2012-09-18T13:00:04.913 に答える