2016-09-25 2 views
1

у меня есть массив как это:expdend массив на то же значение

Array 
(
[0] => Array 
    (
     [item_id] => 18 
     [seller_id] => 1 
     [item_name] => test1 
     [price] => 10.00 
     [username] => user 
     [ship_price] => 10.00 
    ) 

[1] => Array 
    (
     [item_id] => 16 
     [seller_id] => 1 
     [item_name] => test2 
     [price] => 10.00 
     [username] => user 
     [ship_price] => 20.00 
    ) 

я получаю этот массив после Еогеасп:

foreach($result as $i => $row){ 

    $row[$i]["item_id"]   = $row["PRODUCTS_ITEM_ID"]; 
    $row[$i]["seller_id"]  = $row["PRODUCTS_SELLER_ID"]; 
    $row[$i]['item_name']  = $row['PRODUCTS_ITEM_NAME']; 
    $row[$i]['price']   = $row['PRODUCTS_PRICE']; 
    $row[$i]['username']   = $row['username']; 
    $row[$i]['ship_price']  = $row['ship_price']; 

    } 

Как я могу expdend массив, если «seller_id» одно и то же , Я просто хочу сгруппировать все данные, принадлежащие «seller_id» в том же ключе.

я хочу, чтобы получить что-то вроде этого: (извините, если у меня есть ошибки)

Array 
(
["seller_id"] => Array 
    (
     [0] => Array 
     [item_id] => 18 
     [seller_id] => 1 
     [item_name] => test1 
     [price] => 10.00 
     [ship_price_value] => 10.00 
     [username] => user 
     [ship_price] => 10.00 

     [1] => Array 
     [item_id] => 16 
     [seller_id] => 1 
     [item_name] => test2 
     [price] => 10.00 
     [ship_price_value] => 10.00 
     [username] => user 
     [ship_price] => 20.00 
    ) 

)

+0

Это решение * может быть вашим требованием. После цикла 'foreach' сделайте следующее:' $ seller_array = array(); $ seller_array ['seller_id'] = $ row; var_dump ($ seller_array) '. –

ответ

0

У вас есть 2 варианта о том, как решить эту проблему. Первым было бы создание желаемой структуры массива в вашей начальной петле foreach(). Это означает, что вы должны сделать это только один раз. Код для этого параметра будет выглядеть примерно так, как показано ниже.

ПРИМЕЧАНИЕ:seller_id Ключ не добавляется в качестве string; вместо этого продавец_ид в Ключи просто является числовым seller_id для предметов, имеющих аналогичные seller_ids. Это было намеренно, потому что, если вы попытались использовать строковый ключ seller_id, и у вас есть элементы с разными seller_ids; Вы можете быть уверены, потери данных, поскольку последующие данные будут переопределять предыдущие - Ключи статичности, идентичны и то же [seller_id]: так что имейте это в виду, как хорошо ...

<?php 

    $arrSellerRows    = []; 

    foreach($result as $i => $row){ 
     $temp      = []; 
     $sellerID     = $row["PRODUCTS_SELLER_ID"]; 
     $temp[$i]["item_id"]  = $row["PRODUCTS_ITEM_ID"]; 
     $temp[$i]["seller_id"]  = $sellerID; 
     $temp[$i]['item_name']  = $row['PRODUCTS_ITEM_NAME']; 
     $temp[$i]['price']   = $row['PRODUCTS_PRICE']; 
     $temp[$i]['username']  = $row['username']; 
     $temp[$i]['ship_price']  = $row['ship_price']; 

     if(!array_key_exists($sellerID, $arrSellerRows)){ 
      $arrSellerRows[$sellerID] = []; 
      $arrSellerRows[$sellerID][] = $temp; 
     }else{ 
      $arrSellerRows[$sellerID][] = $temp; 
     } 
    } 

Второй вариант потребует, чтобы вы взяли полученный массив из начального цикла foreach(), а затем обработали его немного дальше, чтобы получить желаемую структуру. Это не будет эффективным, так как он предполагает использование 2 Loops для чего-то, что может быть достигнуто только с одной, единственной Loop:

<?php 


    $array  = [ 
     [ 
      'item_id'  => 18, 
      'seller_id'  => 1, 
      'item_name'  => 'test1', 
      'price'   => 10.00, 
      'username'  => 'user', 
      'ship_price' => 10.00, 
     ], 
     [ 
      'item_id'  => 16, 
      'seller_id'  => 1, 
      'item_name'  => 'test2', 
      'price'   => 10.00, 
      'username'  => 'user', 
      'ship_price' => 20.00, 
     ], 
    ]; 


    function groupBySellerID($array){ 
     $arrSellerRows = []; 
     foreach($array as $iKey=>$arrData){ 
      $sellerID = $arrData['seller_id']; 
      if(!array_key_exists($sellerID, $arrSellerRows)) { 
       $arrSellerRows[$sellerID] = []; 
       $arrSellerRows[$sellerID][] = $arrData; 
      }else{ 
       $arrSellerRows[$sellerID][] = $arrData; 
      } 
     } 
     return $arrSellerRows; 
    } 

    var_dump(groupBySellerID($array)); 
    //YIELDS::: 
    array (size=1) 
     1 => // THIS NUMBER REPRESENTS THE SELLER_ID (WHICH IS 1) 
     array (size=2) 
      0 => 
      array (size=6) 
       'item_id' => int 18 
       'seller_id' => int 1 
       'item_name' => string 'test1' (length=5) 
       'price' => float 10 
       'username' => string 'user' (length=4) 
       'ship_price' => float 10 
      1 => 
      array (size=6) 
       'item_id' => int 16 
       'seller_id' => int 1 
       'item_name' => string 'test2' (length=5) 
       'price' => float 10 
       'username' => string 'user' (length=4) 
       'ship_price' => float 20 
+0

Спасибо, я думаю, что получил – david2000

+0

Ok Poiz, но в случае, если я хочу вывести результат в html, как я могу сгруппировать результат продавцом_id, бросить foreach loop. – david2000

+0

@ david2000 Результат уже сгруппирован по 'seller_id'. Поэтому, если yo хочет вывести некоторый HTML из результирующего массива, вам просто нужно пройти через этот массив. Но имейте в виду, что, поскольку у вас теперь есть многомерный массив, вам, возможно, придется делать это с вложенными циклами. Например: 'foreach ($ arrSellerRows as $ sellerID => $ arrUniqueRows) {foreach ($ arrUniqueRows как $ key => $ value) {// СОЗДАТЬ ВАШ HTML-МАРКУП; }} ' – Poiz

0
$seller = array(); 
foreach($result as $i => $row){ 
    $seller['seller_id'][] = $row; 
} 
var_dump($seller); 

Этот код выше может помочь вам.

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