1

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

$mergedItems = array(
  0 => array(
    'id_item' => 'AZ-110'
    'amount' => 12
  ),
  1 => array(
    'id_item' => 'BZ-110',
    'amount' => 13
  ),
  2 => array(
    'id_item' => 'BZ-210',
    'amount' => 28
  ),
  3 => array(
    'id_item' => 'CZ-291',
    'amount' => 11
  )
);

およびこの配列:

$items = array(
  0 => array(
    'number' => 'AZ-110'
  ),
  1 => array(
    'number' => 'BZ-110'
  ),
  2 => array(
    'number' => 'CZ-291'
  ),
  3 => array(
    'number' => 'BZ-210'
  )
);

今私が欲しいのは、最初の配列をid_item値で並べ替えて、その値で2番目の配列と同じ順序に一致させることです。

結果の配列には、2 番目の配列のすべての値と、最初の配列に属する金額値が含まれている必要があります。キーを保管してはいけません!

2番目の配列には動的な量のアイテムがあるため、使用できませんarray_merge。したがって、最初の配列に設定されている2番目の配列のすべてのアイテムのみが必要です。

誰かが私が意味することを理解していますか? この結果を期待どおりに取得するための迅速で汚れのない方法を探しています。

/編集:

期待される配列:

$detailedItems = array(
  0 => array(
    'number' => 'AZ-110',
    'amount' => 12
  ),
  1 => array(
    'number' => 'BZ-110',
    'amount' => 13
  ),
  2 => array(
    'number' => 'CZ-291',
    'amount' => 11
  ),
  3 => array(
    'number' => 'BZ-210',
    'amount' => 28
  )
);
4

4 に答える 4

0

私の知る限り、これを行うための「汚れていない」(単一行を意味する)方法は実際にはありませんが、この関数は機能するはずです:

$out = array();
foreach ($mergedItems as $key => $value) {
    if (array_key_exists($key, $detailedItems)) { // Make sure it exists to prevent errors
        $out[$key] = $detailedItems[$key] + array('amount' => $value['amount']);
    } else {
        $out[$key] = $value['amount'];
    }
}
print_r($out);
于 2013-09-02T13:16:49.727 に答える
0

PHP 5.5 ソリューション:

$itemMap = array_flip(array_column($mergedItems, 'id_item'));
$result = array_map(
    function($i) use($itemMap, $mergedItems) { 
        return $mergedItems[$itemMap[$i['number']]];
    },
    $items);

print_r($result);

5.3 <= PHP < 5.5 の場合は、次のように単純に置き換えることができarray_mapますarray_column

$itemMap = array_flip(array_map(
    function($i) { return $i['id_item']; },
    $mergedItems));

使い方

アイデアは、アイテム番号のマップを 内のインデックスに作成すること$mergedItemsです。

[
    'AZ-100' => 0,
    'BZ-110' => 1,
    'BZ-210' => 2,
    // etc
]

この情報が手元にあれ$itemsば、(結果がその配列に基づいて順序付けられるように)繰り返し処理し$mergedItems、毎回結果に追加する適切な要素を選択するのは非常に簡単です。

于 2013-09-02T13:23:17.037 に答える