Php 翻转多维数组的更好方法?

Php 翻转多维数组的更好方法?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我从数据库中检索到一些数据,其结构如下: [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作为索引,因为这样可以避免在数组上循环查找值。如

我从数据库中检索到一些数据,其结构如下:

[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
作为索引,因为这样可以避免在数组上循环查找值。如果这是一个平面数组,我可以通过
数组翻转
轻松完成,但因为它不是,所以我选择使用多维数组翻转或滚动我自己的逻辑:

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'];
}
($i=0;$i{ $s[$r[$i]['item_id']['dice_image']=$r[$i]['dice_image']; $s[$r[$i]['item\u id']['dice\u chat\u css']=$r[$i]['dice\u chat\u css']; } 我知道这很简单,但感觉就像我在重新发明轮子。是否有一种被接受的、更优化的方法可用,或者我对此感到奇怪?

为什么不这样做呢

$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;
}
为什么不直接做呢

$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;
}

您可以添加
unset($row['item\u id'])
以从条目中删除iditself@Eric当然,但这通常是多余的。它不会占用太多内存,而且当不将当前使用行的索引存储在单独的变量中时,它有时仍然很有用。最终,我更喜欢我的for()流,但我相信您确实为我确认了,简单地迭代数组是正确的解决方案。您可以添加
unset($row['item_id'))
从条目中删除iditself@Eric当然,但这通常是多余的。它不会占用太多内存,而且当不将当前使用行的索引存储在单独的变量中时,它有时仍然很有用。最终,我更喜欢我的for()流,但我相信您确实为我确认了,简单地遍历数组是正确的解决方案。