Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как из массива удалить повторяющиеся значения?
 
 автор: simbel   (13.08.2007 в 21:02)   письмо автору
 
 

Второй день уже бьюсь - ничего не получается. Помогите, пожалуйста.

Суть проблемы.

Есть многомерный ассоциативный" массив. Вот кусок этого масства -

$shop = > Array 
          (  
               [vendor] => Array
                           (  
                               [0] => Array ( [id] => 156, [vendor] => APC ) ,
                               [1] => Array ( [id] => 143, [vendor] => Canon ),
                               [2] => Array ( [id] => 73, [vendor] => Toshiba ),
                               [3] => Array ( [id] => 73, [vendor] => Toshiba ),
                               [4] => Array ( [id] => 156, [vendor] => APC ) , 
                               [5] => Array ( [id] => 143, [vendor] => Canon ),
                               [6] => Array ( [id] => 69, [vendor] => Sony ),
                               [7] => Array ( [id] => 157, [vendor] => Powercom ),            
                               [8] => Array ( [id] => 69, [vendor] => Sony )
                           )
           );


Каким образом удалить из этого массива все повторяющиеся элементы? Вобщем, что бы получился такой массив -

$shop = > Array 
          (  
               [vendor] => Array
                           (  
                               [0] => Array ( [id] => 156, [vendor] => APC ) ,
                               [1] => Array ( [id] => 143, [vendor] => Canon ),
                               [2] => Array ( [id] => 73, [vendor] => Toshiba ),
                               [3] => Array ( [id] => 69, [vendor] => Sony ),
                               [4] => Array ( [id] => 157, [vendor] => Powercom ),            
                           )
           );


Подскажите, пожалуйста, как можно решить эту задачу?

   
 
 автор: Futurer   (13.08.2007 в 21:17)   письмо автору
 
   для: simbel   (13.08.2007 в 21:02)
 

array_unique(array);
стандартная функция. используйте её и цикл

   
 
 автор: simbel   (13.08.2007 в 21:37)   письмо автору
 
   для: Futurer   (13.08.2007 в 21:17)
 

Я уже всё что мог перепробовал и с помощью этой функции тоже пытался решить эту задачку.

Я понимаю как она работает с одномерным массивом, но с многомерным у меня ничего не получается. Каким образом использовать её в цикле, в каком цикле лучше?

   
 
 автор: Unkind   (13.08.2007 в 23:48)   письмо автору
 
   для: simbel   (13.08.2007 в 21:37)
 

Плохой массив у Вас.

Вот это:

                               [1]
                               [2]
                               [3]
                               [4]  
                               [5]
                               [6] 
                               [7]    
                               [8] 

никакой смысловой нагрузки не несёт. Заменили бы на id => vendor.

   
 
 автор: Futurer   (14.08.2007 в 00:19)   письмо автору
 
   для: simbel   (13.08.2007 в 21:37)
 

Поскольку у вас повторяются значения попарно:
[2] => Array ( [id] => 73, [vendor] => Toshiba ),
[3] => Array ( [id] => 73, [vendor] => Toshiba ),
то создайте из массива 2 одномерных, потом произведите операцию и оставьте только уникальные элементы, а потом используя оставшиеся, уникальные ID соберите из исходного массива новый, уже без лишних элементов.

   
 
 автор: simbel   (14.08.2007 в 03:21)   письмо автору
 
   для: Futurer   (14.08.2007 в 00:19)
 

Сделал слеующим образом -


  function criateVendor($curoffer)
  {
    for($i = 0; $i < count($curoffer); $i++)
    {
      $id = $curoffer[$i]['vendor']['id'];
      $vend = $curoffer[$i]['vendor']['vendor'];
      $shop['vendor'][$id] = $vend;
    }
    return $shop['vendor'];
  }


В результате получается массив -


$shop = > Array  
    (              
       [vendor] => Array
             (
                [156] => APC
                [73] => Toshiba
                [143] => Canon
                [69] => Sony
                [157] => Powercom
             )
    );


Вобщем-то и такой результат подходит тоже, хотя лучше всё же если бы масив получался таким же как я описал в превом сообщении. Но так у меня, сколько не эксперементировал, не получается.

Всем спасибо за подсказки.

   
 
 автор: Shiva   (14.08.2007 в 03:49)   письмо автору
 
   для: simbel   (14.08.2007 в 03:21)
 

Разберите вручную


$shop =  Array  
          (   
               "vendor" => Array( 
                               0 => Array ( "id" => 156, "vendor" => APC ) , 
                               1 => Array ( "id" => 143, "vendor" => Canon ), 
                               2 => Array ( "id" => 73, "vendor" => Toshiba ), 
                               3 => Array ( "id" => 73, "vendor" => Toshiba ), 
                               4 => Array ( "id" => 156, "vendor" => APC ) ,  
                               5 => Array ( "id" => 143, "vendor" => Canon ), 
                               6 => Array ( "id" => 69, "vendor" => Sony ), 
                               7 => Array ( "id" => 157, "vendor" => Powercom ),             
                               8 => Array ( "id" => 69, "vendor" => Sony )           
                           ) 
           ); 
$newShop = array("vendor" => array());
foreach($shop["vendor"] as $arr)
{
    if(!in_array($arr, $newShop["vendor"]))
    {
        $newShop["vendor"][] = $arr;
    }
}

   
 
 автор: simbel   (23.11.2007 в 00:14)   письмо автору
 
   для: simbel   (13.08.2007 в 21:37)
 

Ну и дураком я был тогда - не мог выполнить простейших действий над массивом. Одним словом был совсем зелёный. Другое дело сейчас.

   
 
 автор: simbel   (23.11.2007 в 00:15)   письмо автору
 
   для: simbel   (23.11.2007 в 00:14)
 

Ну и дураком я был тогда - не мог выполнить простейших действий над массивом. Одним словом был совсем зелёный. Другое дело сейчас.

   
 
 автор: simbel   (23.11.2007 в 00:15)   письмо автору
 
   для: simbel   (13.08.2007 в 21:02)
 

Ну и дураком я был тогда - не мог выполнить простейших действий над массивом. Одним словом был совсем зелёный. Другое дело сейчас.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования