2012-01-12 118 views
0
$items = array(
    array(
     'id' => 0, 
     'name' => 'Simple Sword', 
     'type' => 'weapon', 
     'price' => 200, 
     'value1' => 5, 
     'value2' => 10, 
     'value3' => 0, 
     'value4' => 0, 
     'value5' => 0 
    ), 
    array(
     'id' => 1, 
     'name' => 'Iron Sword', 
     'type' => 'weapon', 
     'price' => 500, 
     'value1' => 0, 
     'value2' => 0, 
     'value3' => 0, 
     'value4' => 0, 
     'value5' => 0 
    ) 
); 


$inventory = array(

    array(
     'item' => 0, 
     'slot' => 1, 
     'value1' => 0, 
     'value2' => 0, 
     'value3' => 0, 
     'value4' => 0, 
     'value5' => 0, 
     'equipped' => 0 
    ), 

    array(
     'item' => 1, 
     'slot' => 2, 
     'value1' => 0, 
     'value2' => 0, 
     'value3' => 0, 
     'value4' => 0, 
     'value5' => 0, 
     'equipped' => 1 
    ) 

); 

我需要的是加入這兩個多維數組,或從「Items」數組中取數值,鍵等,並將其放入「item」id與id相匹配的ID數組中從Items數組中。與SQL中的INNER JOIN語句相似。怎麼樣?我無法弄清楚。加入2多維數組

其次,我想打印出$庫存陣,我嘗試以下,但它沒有工作:

foreach ($inventory as $a) { 

    foreach ($a as $b) { 

     echo $b['item']; 

    } 

} 

它給了我無輸出。使用print_r($newarr)

回答

1
foreach($inventory as $key=>$val) 
{ 
    if($val['item'] == $items[$key]['id']) 
    { 
     $newarr[] = array_merge($items[$key],$val); 
    } 
} 

檢查$newarr[],這裏的輸出:

Array 
(
    [0] => Array 
     (
      [id] => 0 
      [name] => Simple Sword 
      [type] => weapon 
      [price] => 200 
      [value1] => 0 
      [value2] => 0 
      [value3] => 0 
      [value4] => 0 
      [value5] => 0 
      [item] => 0 
      [slot] => 1 
      [equipped] => 0 
     ) 

    [1] => Array 
     (
      [id] => 1 
      [name] => Iron Sword 
      [type] => weapon 
      [price] => 500 
      [value1] => 0 
      [value2] => 0 
      [value3] => 0 
      [value4] => 0 
      [value5] => 0 
      [item] => 1 
      [slot] => 2 
      [equipped] => 1 
     ) 

) 

第二個問題,打印出$inventory陣列:

foreach ($inventory as $a) 
{ 
    echo $a['item']; 
    echo $a['slot']; 
    echo $a['value1']; 
    //...etc 
} 
1

一點幫助你的第二個問題:

foreach ($inventory as $a => $b) { 
     echo $b['item']; 
    } 
} 
1

至於第一個問題Zulkhaery Basrul給出了很好的答案。我也會考慮把break聲明,如果關係是一對之一:

if($val['item'] == $items[$key]['id']) { 
    $newarr[] = array_merge($items[$key],$val); 
    break; 
} 

至於第二個問題:

foreach ($inventory as $invKey => $aInventoryItem) { 
    echo $aInventoryItem['item'] . "\n"; 
} 
1

我認爲你可以做到這一點,以便從庫存呼應項目:

foreach($inventory as $inv) { 
     echo $inv['item']; 
    } 
0

我相信這個功能是你在找什麼:

// Join Arrays on Keys 
function array_join($original, $merge, $on) { 
    if (!is_array($on)) $on = array($on); 
    foreach ($merge as $right) { 
     foreach ($original as $index => $left) { 
      foreach ($on as $from_key => $to_key) { 
       if (!isset($original[$index][$from_key]) 
        || !isset($right[$to_key]) 
        || $original[$index][$from_key] != $right[$to_key]) 
        continue 2; 
      } 
      $original[$index] = array_merge($left, $right); 
     } 
    } 
    return $original; 
} 

使用您的方案:

print_r(array_join($items, $inventory, array('id' => 'item'))); 

我問過社會的幫助與優化LEFT JOIN在這裏的功能的版本(唯一的區別是$removeunsetarray_merge):How can I optimize my array_join (simulates a LEFT JOIN) function?