2 массива сопоставляют данные в 1 массив с помощью PHP

1

У меня 2 массива, у первого массива есть ItemID моего элемента, у второго массива есть описание моего элемента. Я хочу сопоставить данные в 1 массив.

Это выглядит как:

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

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

Элементы в массивах не имеют того же значения, что и ID, но они находятся в одном порядке, поэтому:

Описание для первого элемента в rgInventory находится в первом массиве внутри rgDescriptions.

Что мне делать для сопоставления идентификатора id из rgInventory с именем из rgDescriptions в том же массиве, например $backpack = array(); ?

Приветствую вас.

  • 0
    Вы можете использовать array_merge()
  • 0
    @Drudge, но array_merge() не соответствует первому элементу из rgInventory с первым элементом из rgDescriptions .
Показать ещё 4 комментария
Теги:
arrays

2 ответа

0
Лучший ответ

Попробуй это:

<?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')
                                    )
               );

Создайте новую функцию для объединения двух массивов в один массив:

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

Поместите два массива в один массив $newarray:

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

?>

И вы получите следующее:

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

        )

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

        )

)

Надеюсь, это поможет.

0

Вы можете использовать функцию каждый, чтобы получить каждый элемент обоих массивов, а затем объединить его с array_merge и сохранить этот новый элемент в резервном массиве.

Попробуйте что-то вроде этого

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

Выход будет:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню