0

すでに昇順でソートされているマスター配列を想定します。

$values = array('value1', 'value2', 'value3', 'value4', 'value5', 'value6');

そして、特定の要件ごとに順序付けられたキー (インデックス) を持つ別の配列。

$keys = array(0, 2, 1, 5);

必要なロジック:配列を作成する必要があります$output

  • $values誰のインデックスの要素から始めて$keys、インデックスの順序を保持して保存されます。
  • の残りの要素は$values、昇順で後ろに追加されます。

例 1

$values = array('value1', 'value2', 'value3', 'value4', 'value5', 'value6');
$keys = array(0, 2, 1, 5);
$output = array('value1', 'value3', 'value2', 'value6', 'value4', 'value5');

例 2

$values = array('value1', 'value2', 'value3', 'value4', 'value5', 'value6');
$keys = array(5);
$output = array('value6', 'value1', 'value2', 'value3', 'value4', 'value5');

例 3

$values = array('value1', 'value2', 'value3', 'value4', 'value5', 'value6');
$keys is empty, no keys(indexes).
$output = array('value1', 'value2', 'value3', 'value4', 'value5', 'value6');

私は配列を持っ$valuesています。配列$keysを作成する方法を理解する必要があります。これが機能するには、配列にループ$outputが必要になると確信しています。foreach$values

これを理解しようとしてここで壁にぶつかっています...

4

1 に答える 1

1

これを試して...

基本的に$values配列を解析し、関連する値を引き出します。並べ替えられなかった値のみを残すために、配列の設定を解除します。配列内の残りの項目は、ループ後にマージされます。array_merge で。

配列の設定を解除してもインデックス値は変更されないため、この状況で役立ちます。

$keysそれ以上だとエラーになり$valuesます。エラーチェックを追加する必要があります。

$values = array('value1', 'value2', 'value3', 'value4', 'value5', 'value6');
$keys = array(0, 2, 1, 5);

foreach ($keys AS $key) {
    $tempOutput[] = ($values[$key])?$values[$key]:'';
    unset($values[$key]);
}

$output = array_merge($tempOutput, $values);
于 2012-07-01T04:32:47.613 に答える