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

Форум PHP

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

 

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

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

тема: Сравнение массива
 
 автор: Alph[p]a   (24.11.2010 в 16:31)   письмо автору
 
 

есть два массива вида

1. старая цена

[артикул1]=[5 р]
[артикул3]=[2 р]

2. новая цена

[артикул2]=[1 р]
[артикул1]=[4 р]



надо получить массив вида (новая цена)

[артикул1]=[4 р]


может есть готовые решения? функции?

  Ответить  
 
 автор: Суррогат   (24.11.2010 в 17:08)   письмо автору
 
   для: Alph[p]a   (24.11.2010 в 16:31)
 

array_intersect_key($array_2,$array_1)

  Ответить  
 
 автор: Лена   (24.11.2010 в 17:11)   письмо автору
 
   для: Alph[p]a   (24.11.2010 в 16:31)
 

array_merge (старая цена, новая цена);

  Ответить  
 
 автор: Суррогат   (24.11.2010 в 17:17)   письмо автору
 
   для: Лена   (24.11.2010 в 17:11)
 

получится

[артикул1]=[5 р]
[артикул2]=[1 р]
[артикул3]=[2 р]


не совсем то

  Ответить  
 
 автор: sim5   (24.11.2010 в 17:25)   письмо автору
 
   для: Суррогат   (24.11.2010 в 17:17)
 

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

  Ответить  
 
 автор: Alph[p]a   (25.11.2010 в 08:13)   письмо автору
 
   для: sim5   (24.11.2010 в 17:25)
 

все не то, ниче не помагает.

мой код, как формирую массив, но незнаю как сравнить.

  $fh=fopen('24.csv', "r");
   while (list($kod,$price) = fgetcsv($fh, 1024)) {
       $current[$kod]=$price;
       
   }
   fclose ($fh);
 unset ($name);
 unset ($kod);
   
  $fh=fopen('export.csv', "r");
   while (list($kod,$price) = fgetcsv($fh, 1024,';')) {
       $export[$kod]=$price;
       
   }
   fclose ($fh);
   
    unset ($name);
 unset ($kod);


Нужна помощь!

  Ответить  
 
 автор: Trianon   (25.11.2010 в 09:04)   письмо автору
 
   для: Alph[p]a   (25.11.2010 в 08:13)
 

1. Вам подсказали. Что не устраивает?

2. При чем здесь сравнение?

  Ответить  
 
 автор: Alph[p]a   (25.11.2010 в 09:41)   письмо автору
 
   для: Trianon   (25.11.2010 в 09:04)
 

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

  Ответить  
 
 автор: Trianon   (25.11.2010 в 09:45)   письмо автору
 
   для: Alph[p]a   (25.11.2010 в 09:41)
 

[поправлено модератором]

  Ответить  
 
 автор: Alph[p]a   (25.11.2010 в 10:36)   письмо автору
 
   для: Trianon   (25.11.2010 в 09:45)
 

муть есть.. не спорю. конечно лучше кодом помогать чем "лирическими" отступлениями

  Ответить  
 
 автор: Trianon //   (25.11.2010 в 10:45)
 
   для: Alph[p]a   (25.11.2010 в 10:36)
 

[поправлено модератором]

  Ответить  
 
 автор: Alph[p]a   (25.11.2010 в 11:00)   письмо автору
 
   для: Trianon //   (25.11.2010 в 10:45)
 

в том и проблема... не столь и сложная задача... но вызывает ступор второй день...
написал много хрени... вот последняя


<?php
 
for($i 0$i<sizeof($export); $i++) 
  { 
     
// Текущий элемент 
     
$exportVal current($export); 
     
$curVal=current($current);
  
            
// проходим по массиву сайта
             
for($k 0$k<sizeof($current); $k++) {
                 
// если артикул совпадает
  
                
if (key($current)==key($export)) {
                 if (
current($current)!==current($export)) { 
echo 
key($current).' знач. '.$curVal.' / '.key($export).' знач. '.$exportVal.' Надо обновить<BR/>';
                 
$new[key($current)]=$exportVal;
                 }

                 break;
                 }
                 else 
next($current);
             }
   
     
// Следующий
     
next($export); 
     
next($current); 
  }
?>

  Ответить  
 
 автор: sim5   (25.11.2010 в 11:02)   письмо автору
 
   для: Alph[p]a   (25.11.2010 в 11:00)
 

Хрени действительно много, если учесть, что у вас два массива, один со старой ценой другой с новой.

  Ответить  
 
 автор: Alph[p]a   (25.11.2010 в 11:04)   письмо автору
 
   для: sim5   (25.11.2010 в 11:02)
 

вот и проблема ... незнаю как сделать если артикул одинаковый но цены разные заменить на новый....

  Ответить  
 
 автор: sim5   (25.11.2010 в 11:20)   письмо автору
 
   для: Alph[p]a   (25.11.2010 в 11:04)
 

Вам об этом вторым постом уже ответили, как.

  Ответить  
 
 автор: Alph[p]a   (25.11.2010 в 11:38)   письмо автору
 
   для: sim5   (25.11.2010 в 11:20)
 

впринципе работает.. но было бы СОВСЕМ не лишним показывать только те позиции цена у которых изменилась а не все.

  Ответить  
 
 автор: sim5   (25.11.2010 в 11:45)   письмо автору
 
   для: Alph[p]a   (25.11.2010 в 11:38)
 

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

  Ответить  
 
 автор: Trianon   (25.11.2010 в 09:02)   письмо автору
 
   для: sim5   (24.11.2010 в 17:25)
 

как это?

  Ответить  
 
 автор: sim5   (25.11.2010 в 09:57)   письмо автору
 
   для: Trianon   (25.11.2010 в 09:02)
 

Да очень просто ) Если ключи массива, это строки, то будет замещаться значание ключа, если ключ это число, то добавление:
<?
$a1 
= array('12345'=>25,'23456'=>34);
$a2 = array('12345'=>77,'23456'=>84);
print_r(array_merge($a1,$a2)); //Array ( [0] => 25 [1] => 34 [2] => 77 [3] => 84 )
$a1 = array('a12345'=>25,'b23456'=>34);
$a2 = array('a12345'=>77,'b23456'=>84);
print_r(array_merge($a1,$a2)); //Array ( [a12345] => 77 [b23456] => 84 )

  Ответить  
 
 автор: Trianon   (25.11.2010 в 10:03)   письмо автору
 
   для: sim5   (25.11.2010 в 09:57)
 

>Да очень просто )
Откуда возникнут разные типы, если данные взяты из одного источника?
Что руками можно всё попортить, я знаю и без того. Для этого вообще большого ума не требуется.

  Ответить  
 
 автор: sim5   (25.11.2010 в 10:04)   письмо автору
 
   для: Trianon   (25.11.2010 в 10:03)
 

Причем тут типы? Они и будут одинаковы, коли они от одного источника. Но если артикул строка, значит получится, если нет, значит нет.

  Ответить  
 
 автор: Trianon   (25.11.2010 в 10:08)   письмо автору
 
   для: sim5   (25.11.2010 в 10:04)
 

да, пардон.
Верхний пример рвет моск.

Интересно, они там какой частью тела думали...

показательно:
<?php
$a1 
= array(' 12345'=>25,'23456'=>34);
$a2 = array(' 12345'=>77,'23456'=>84);
print_r(array_merge($a1,$a2));

Array ( [ 12345] => 77 [0] => 34 [1] => 84 )

  Ответить  
 
 автор: sim5   (25.11.2010 в 10:17)   письмо автору
 
   для: Trianon   (25.11.2010 в 10:08)
 

Они, это кто, разработчики?) Не знаю чем думали, но array_merge работает так.

PS. ' 12345' - такого нельзя допущать ;-)

  Ответить  
 
 автор: Trianon //   (25.11.2010 в 10:44)
 
   для: sim5   (25.11.2010 в 10:17)
 

>PS. ' 12345' - такого нельзя допущать ;-)
Наоборот, похоже, подобного рода грязный хак и нужено использовать в заявленных тредстартером целях

  Ответить  
Rambler's Top100
вверх

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