2

次の構造のデータベースからいくつかのデータを取得しました。

[0]
  [item_id] = 197
  [dice_chat_css] = "foo"
  [dice_image] = "bar.png"
[1]
  [item_id] = 128
  [dice_chat_css] = "foo"
  [dice_image] = "bar.png"

このデータを残りの(PHP)アプリケーションに渡すための最も便利で計算コストの低い方法は、item_id値を検索するために配列をループする必要がないため、インデックスとして使用することです。これがフラット配列の場合、これはで簡単に実行できますが、そうではないため、PHP.netのコメントにリストされてarray_flipいる多次元array_flipを使用するか、独自のロジックをロールするかを選択します。

for ($i = 0; $i < sizeOf($r); $i++){
    $s[$r[$i]['item_id']]['dice_image'] = $r[$i]['dice_image'];
    $s[$r[$i]['item_id']]['dice_chat_css'] = $r[$i]['dice_chat_css'];
}

簡単なことは知っていますが、ここで車輪の再発明をしているような気がします。受け入れられ、より最適化された方法が利用可能ですか、それとも私はこれについて奇妙ですか?

4

1 に答える 1

4

どうして

$indexed = array();
foreach ($r as $row) {
    $indexed[$row['item_id']] = $row;
}

// or if you're concerned about memory (e.g. result set is large), less smooth version:
foreach ($r as $index => $row) {
    $r[$row['item_id']] = $row;
    unset($r[$index]);    // it works ok, foreach doesn't traverse over added elements, but it isn't a good way
}

// or smoother alternative for unset(), have second array contain links to first:
$indexed = array();
foreach ($r as &$row) {
    $indexed[$row['item_id']] = &$row;
}
于 2012-09-03T21:36:25.137 に答える