2014-11-25 2 views
0

У меня есть два массива, которые поступают из одной базы данных, используя тот же запрос, чтобы получить оба. оба содержат информацию об одном заказе клиента с двумя разными позициями (Билль материалов), в первом из которых есть Позиция ItemID= 600271, а вторая имеет LineItem ItemID=600274, но, как вы можете видеть ниже, оба они имеют одинаковый номер заказа клиента [CustomerSONo] => [7] => **15020**Как я могу сравнить и объединить два массива

Так как я могу сравнить или объединить эти два массива. ?

// запрос

$result= --select statement--; 
    while($row = mysqli_fetch_array($result)) { 
     print_r($row); 
    } 

Массив 1

 Array ( 
      [0] => XXX001 
      [CustomerId] => XXX001 
      [1] => XXX Company Name.* 
      [Customer_Bill_Name] => XXX Company Name.* 
      [2] => DHE 
      [WhichShipVia] => DHE [3] => 
      [INV_POSOOrderNumber] => [4] => 2014-12-19 
      [ShipByDate] => 2014-12-19 [5] => 
      [GoodThruDate] => [6] => 
      [CustomerSONo] => [7] => 15020 
      [Reference] => 15020 [8] => 2014-11-25 
      [TransactionDate] => 2014-11-25 [9] => 1 
      [DistNumber] => 1 
      [10] => 70.0000000000000000000 //here is the difference 1 
      [Quantity] => 70.0000000000000000000 //here is the difference 2 
      [11] => 600271 //here is the difference 3 
      [ItemId] => 600271 //here is the difference 4 
      [12] => ASSY7.60-15SL/8 FRM I1 15X6 6-6, BLK (GWT-761508 (24) //here is the difference 5 
      [SalesDescription] => ASSY7.60-15SL/8 FRM I1 15X6 6-6, BLK (GWT-761508)(24)//here is the difference 1 //here is the difference 6 
      [13] => AS1577 //here is the difference 7 
      [PartNumber] => AS1577 //here is the difference 8 
      [14] => ASSY7.60-15 8PLY W/WHL15X6 BLK //here is the difference 9 
      [ItemDescription] => ASSY7.60-15 8PLY W/WHL15X6 BLK) 

Массив 2:

 Array ( 
      [0] => XXX001 
      [CustomerId] => XXX001 
      [1] => XXX Company Name.* 
      [Customer_Bill_Name] => XXX Company Name.* 
      [2] => DHE [WhichShipVia] => DHE [3] => 
      [INV_POSOOrderNumber] => [4] => 2014-12-19 
      [ShipByDate] => 2014-12-19 [5] => 
      [GoodThruDate] => [6] => 
      [CustomerSONo] => [7] => 15020 
      [Reference] => 15020 [8] => 2014-11-25 
      [TransactionDate] => 2014-11-25 [9] => 2 
      [DistNumber] => 2 
      [10] => 6.0000000000000000000 //here is the difference 1 
      [Quantity] => 6.0000000000000000000 //here is the difference 2 
      [11] => 600274 //here is the difference 3 
      [ItemId] => 600274 //here is the difference 4 
      [12] => ASSY9.5L-15SL/8 FLT I1 15X8 6-6, BLK (GWT-951508)(16)  
      [SalesDescription] => ASSY9.5L-15SL/8 FLT I1 15X8 6-6, BLK (GWT-951508)(16) //here is the difference 5 
      [13] => AS1601 //here is the difference 6 
      [PartNumber] => AS1601 //here is the difference 7 
      [14] => ASSY9.5L-15 W/WHL15X8 6/6 BLK //here is the difference 8 
      [ItemDescription] => ASSY9.5L-15 W/WHL15X8 6/6 BLK) //here is the difference 9 
+0

Вы начинаете с определения того, как этот союз будет выглядеть. Я понятия не имею, как вы хотите получить конечный результат:) – Wrikken

+1

[посмотреть эту ссылку] (http://stackoverflow.com/questions/26874385/create-an-array-with-a-key-if-values- существует-в-двух-массивах) его вопрос, который я опубликовал, и сам отправил ответ – alda1234

+0

['array_intersect_key'] (http://php.net/manual/en/function.array-intersect-key.php). –

ответ

1

Вариант 1

$orders = array(); 

while($row = mysqli_fetch_array($result)) { 
    $orders[$row['CustomerSONo'][] = $row; 
} 

Это добавит все строки, которые совместно используют один и тот же CustomerSONo вместе в одном массиве. Если у вас есть несколько заказов, вы можете получить все раздельные заказы, используя

foreach($orders as $orderNo => $order) { 
    foreach($order as $key => $orderRow) { 

    } 
} 

Вариант 2

Однако, если вы только хотите, чтобы извлечь ItemIDs от каждого заказа, вы можете сделать следующее:

$orderItems = array(); 
while($row = mysqli_fetch_array($result)) { 
    $orderItems[$row['CustomerSONo']][] = $row['ItemID']; 
} 

Это создаст массив с именем $orderItems, который сохраняет только номера заказов в массиве, а не всю информацию о заказе.

Вариант 3

Если вы хотите повторить линии, сначала нужно «сортировать» их, как в варианте 2. После того, как вы получили все ItemID S, которые принадлежат к одному CustomerSONo, вы делаете еще один цикл Еогеасп в эхо их в одну строку.

foreach($orders as $orderNo => $itemIds) { 
    echo "Order #" . $orderNo . ": " . implode(", ", $itemIds); 
} 

Это создаст следующее:

Order #1: 18340, 1837, 13 Order #2: 183, 868, 285, 860

+0

Ему не нужны все сравнения ключей массива. Его интересуют только все массивы, на которых отвечает CustomerSONo, поэтому он может группировать их вместе. Мой метод создает один массив со всеми заказами, которые он извлекает из MySQL, которые он может легко найти. Я действительно не понимаю, в чем проблема с этим кодом. Используя функцию, указанную в ответе на его исходный вопрос, PHP будет сравнивать все индексы, в то время как он только хочет, чтобы они соответствовали друг другу. Я думаю, что это ненужная работа. –

+1

Извиняюсь, неправильно читал что-то с моей стороны. +1 для компенсации. –

+0

@Niels Нет проблем :-) –

Смежные вопросы