2012-01-12 31 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 
    ) 

); 

私が必要とするのは、これら2つの多次元配列を結合するか、 "Items"配列から値、キーなどを取り出し、 "item" 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 
     ) 

) 

2番目の質問、$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

最初の質問については、ズルカエリーバスルールが良い答えを出しました。私はあなただけのインベントリからアイテムをエコーするために、これを行うことができると思い

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

:2番目の質問については

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

:私はまた、関係が1対1である場合break文を入れて検討します:私は、この関数はあなたが探しているものであると考えてい

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

あなたのシナリオの使用法:How can I optimize my array_join (simulates a LEFT JOIN) function?

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

私はLEFTがここに機能のバージョンのJOIN最適化のヘルプのためのコミュニティを(唯一の違いは$removeunsetarray_mergeある)求めてきました