2016-03-26 33 views
1

ile 1 dizi içine veri eşleşir Ben 2 dizinin var, ilk dizi örneğin Öğe benim öğe, ikinci dizi benim öğe hakkında açıklama var. Verileri 1 dizi ile eşleştirmek istiyorum. dizilerde2 dizi PHP

[rgInventory] => Array 
    (
     [1234567890] => Array 
      (
       [id] => 1234567890 
       [classid] => 123456789 
       [instanceid] => 987654321 
       [amount] => 1 
       [pos] => 1 
      ) 
    ) 

[rgDescriptions] => Array 
    (
     [192837465_918273645] => Array 
      (
       [appid] => 730 
       [name] => Something 
      ) 
    ) 

Öğeler ID gibi aynı değeri olmayan, ama çok aynı sırayla şunlardır:

Öyle görünüyor rgInventory ilk öğenin

Açıklama rgDescriptions içinde ilk dizidir.

Ben örneğin $backpack = array(); aynı dizide rgDescriptions den adıyla ile rgInventory örnek id için maç için ne yapmalıyım?

Size Saygılarımızla.

+0

'array_merge()' – Drudge

+0

@Drudge öğesini kullanabilirsiniz, ancak 'array_merge()', 'rgDescriptions' öğesinden ilk öğe olan' rgInventory' öğesinden ilk öğe ile eşleşmez. – mateuszji

+0

İlk öğeyi "rgInventory" öğesinden "rgDescription" öğesinden yumruk öğesiyle nasıl eşleştireceksiniz? Ortak bir şey yok. – Drudge

cevap

0

bu deneyin:

<?php 
$array1 = array('rgInventory' => 
      array(
        '1234567890' => array(
            'id' => 1234567890, 
            'classid' => 123456789, 
            'instanceid' => 987654321, 
            'amount' => 1, 
            'pos' => 1 
            ) 
         ) 
       ); 

$array2 = array(
       'rgDescriptions' => array(
        '192837465_918273645' => array(
          'appid' => 730, 'name' => 'Something') 
            ) 
       ); 

bir diziye iki diziyi birleştirmek için yeni işlevi oluşturun:

function array_sum_recursive($data1, $data2) { 
     if (!is_array($data1) && !is_array($data2)) { 
     return $data1 + $data2; 
    } 
    // deepest array gets precedence 
    if (!is_array($data2)) { 
     return $data1; 
    } 
    if (!is_array($data1)) { 
     return $data2; 
    } 
    //merge and remove duplicates 
    $keys = array_unique(array_merge(array_keys($data1), array_keys($data2))); 
    foreach ($keys as $key) { 
     if (isset($data1[$key]) && isset($data2[$key])) { 
      $result[$key] = array_sum_recursive($data1[$key], $data2[$key]); 
     } else if (isset($data1[$key])) { 
      $result[$key] = $data1[$key]; 
     } else { 
      $result[$key] = $data2[$key]; 
     } 
    } 
    if(empty($result)){ 
     echo "no result"; 
     die(); 
    }else{ 
     return $result; 
    } 
} 

bir dizide $newarray iki diziyi koyun:

$newonearray = array_sum_recursive($array1, $array2); 
echo '<pre>'; 
print_r($newonearray); 

?> 

Ve bu alacak: bu yardımcı olabilir

Array 
(
    [rgInventory] => Array 
     (
      [1234567890] => Array 
       (
        [id] => 1234567890 
        [classid] => 123456789 
        [instanceid] => 987654321 
        [amount] => 1 
        [pos] => 1 
       ) 

     ) 

    [rgDescriptions] => Array 
     (
      [192837465_918273645] => Array 
       (
        [appid] => 730 
        [name] => Something 
       ) 

     ) 

) 

Umut.

0

Her iki dizinin her bir öğesini almak için each işlevini kullanabilirsiniz, ardından ile birleştirin ve bu yeni öğeyi yedekleme dizisine kaydedin. Bu

<?php 

$rgInventory = ['firstInv' => ['invId' => 1], 'secondInv' => ['invId' => 2]]; 
$rgDescriptions = ['firstDesc' => ['descId' => 1], 'secondDesc' => ['descId' => 2]]; 

if (count($rgInventory) && count($rgInventory) == count($rgDescriptions)) { 
    $backpack = []; 

    while($inventory = each($rgInventory)) { 
     $description = each($rgDescriptions); 
     $item = array_merge($inventory['value'], $description['value']); 
     $backpack[] = $item; 
    } 

    var_dump($backpack); 
} 

Çıktı gibi

deneyin şey olacaktır:

array(2) { 
    [0]=> 
    array(2) { 
    ["invId"]=> 
    int(1) 
    ["descId"]=> 
    int(1) 
    } 
    [1]=> 
    array(2) { 
    ["invId"]=> 
    int(2) 
    ["descId"]=> 
    int(2) 
    } 
}