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

Форум PHP

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

 

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

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

тема: Сравнить два массива на одинаковые значения
 
 автор: technic611   (30.01.2011 в 23:45)   письмо автору
 
 

Голова уже кругом идет, нужно сравнить два массива.

один массив берется из таблицы.
$query="SELECT  * FROM url";
  $res = mysql_query($query);

if(mysql_num_rows($res)>0)
  {
 $cat = mysql_fetch_array($res);
}


второй массив вот
Array ( [0] =>test [1] =>test2 [2] => test3 [3] =>test4] )


нужно их сравнить и если значение не сопадает занести его в таблицу

  Ответить  
 
 автор: sim5   (31.01.2011 в 05:52)   письмо автору
 
   для: technic611   (30.01.2011 в 23:45)
 

Функции пересечения массивов позволяют вернуть массив как совпадающих, так и несовпадающих элементов массивов. Кружится голове нет причины.

  Ответить  
 
 автор: neadekvat   (31.01.2011 в 07:21)   письмо автору
 
   для: technic611   (30.01.2011 в 23:45)
 

Пища для ума.

  Ответить  
 
 автор: cheops   (31.01.2011 в 09:48)   письмо автору
 
   для: technic611   (30.01.2011 в 23:45)
 

Возможно вас заинтересует функция array_diff(), а также другие функции группы array_diff.

  Ответить  
 
 автор: technic611   (31.01.2011 в 12:15)   письмо автору
 
   для: cheops   (31.01.2011 в 09:48)
 

что то аргуемент $cat, функция невоспринимает как массив (((( видит его как пустой, выдает результат все что в $out

$result=array_diff($out,$cat);

  Ответить  
 
 автор: cheops   (31.01.2011 в 12:23)   письмо автору
 
   для: technic611   (31.01.2011 в 12:15)
 

1) После функции mysql_query() поставьте проверку - запрос выполняется верно?
$query="SELECT  * FROM url"; 
  $res = mysql_query($query);
  if(!$res) exit("Ошибка - ".mysql_error);

2) У вас запрос SELECT * FROM url возвращает одну строку или несколько? И какие поля таблицы подвергаются сравнению?

  Ответить  
 
 автор: technic611   (31.01.2011 в 12:37)   письмо автору
 
   для: cheops   (31.01.2011 в 12:23)
 

возвращает 50 строк, поле url
также 50 строк находятся вмассиве $out

  Ответить  
 
 автор: cheops   (31.01.2011 в 12:42)   письмо автору
 
   для: technic611   (31.01.2011 в 12:37)
 

Какова структура таблицы url? Сколько в ней полей и как они называются?

  Ответить  
 
 автор: technic611   (31.01.2011 в 12:42)   письмо автору
 
   для: technic611   (31.01.2011 в 12:37)
 

вот что показывает распечатка масисва $data

Array ( [0] => Array ( [0] => http://****/cars/used/sale/8551732-a9d2.html [url] => http://***/cars/used/sale/8551732-a9d2.html ) [1] => Array ( [0] => http://****/cars/used/sale/7637159-47dd.html [url] => http://****/cars/used/sale/7637159-47dd.html ) [2] => Array ( [0] => http://****/cars/used/sale/8794636-de59.html [url] => http://****/cars/used/sale/8794636-de59.html ) .....

  Ответить  
 
 автор: cheops   (31.01.2011 в 12:44)   письмо автору
 
   для: technic611   (31.01.2011 в 12:42)
 

Вам следует формировать массив $data следующим образом
while($result = mysql_fetch_array($res)) $data[] = $result['url'];

  Ответить  
 
 автор: technic611   (31.01.2011 в 12:36)   письмо автору
 
   для: cheops   (31.01.2011 в 09:48)
 


$rows = mysql_num_rows($res); 
    for($i = 0;$i < $rows;$i++) { 
        $data[$i] = mysql_fetch_array($res); 
    } 


сделал уже так, все равновыводит одно и тоже, что массиве $out и в $data, хотя значения там сейчас одинкаовые находятся, тоесть не должно выводится ничего по идее, а выводит

$result=array_diff($out,$data);

  Ответить  
 
 автор: cheops   (31.01.2011 в 12:38)   письмо автору
 
   для: technic611   (31.01.2011 в 12:36)
 

Выведите дампы массивов при помощи конструкции (отлаживать будет проще)
<?php
  
echo "<pre>";
  
print_r($data);
  echo 
"</pre>";
?>

  Ответить  
 
 автор: cheops   (31.01.2011 в 12:40)   письмо автору
 
   для: technic611   (31.01.2011 в 12:36)
 

Традиционно результирующие таблицы читают при помощи цикла while
while($result = mysql_fetch_array($res)) $data[] = $result;

Следует иметь в виду, что $result сам по себе массив, поэтому $data - будет двумерным массивом. Вам из таблицы какое-то конкретное поле нужно?

  Ответить  
 
 автор: technic611   (31.01.2011 в 12:45)   письмо автору
 
   для: cheops   (31.01.2011 в 12:40)
 

распечатка массива $out

Array ( [0] => http://****/cars/used/sale/8551732-a9d2.html [1] => http://*****/cars/used/sale/7637159-47dd.html [2] => http://****/cars/used/sale/8794636-de59.html [3] => http://****/cars/used/sale/8655215-4093.html [4] => http://****/cars/used/sale/8799890-69ce.html ....

  Ответить  
 
 автор: technic611   (31.01.2011 в 12:46)   письмо автору
 
   для: cheops   (31.01.2011 в 12:40)
 

да, поле url

  Ответить  
 
 автор: cheops   (31.01.2011 в 12:47)   письмо автору
 
   для: technic611   (31.01.2011 в 12:46)
 

Тогда лучше воспользоваться решением в сообщении http://softtime.ru/forum/read.php?id_forum=1&id_theme=78637#post467567

  Ответить  
 
 автор: technic611   (31.01.2011 в 12:54)   письмо автору
 
   для: cheops   (31.01.2011 в 12:47)
 

после модернизации while и указания в запросе явного поля

Array ( [0] => http://*****/cars/used/sale/8551732-a9d2.html [1] => http://*****/cars/used/sale/7637159-47dd.html [2] => http://****/cars/used/sale/8794636-de59.html [3] => http://****/cars/used/sale/8655215-4093.html [4] .....

  Ответить  
 
 автор: cheops   (31.01.2011 в 12:58)   письмо автору
 
   для: technic611   (31.01.2011 в 12:54)
 

Да все верно и $out у вас имеет такой же формат - можно сравнивать.

  Ответить  
 
 автор: technic611   (31.01.2011 в 12:59)   письмо автору
 
   для: cheops   (31.01.2011 в 12:47)
 

кажется получается, вся проблема была в том что массив одномерный и двумерный?

  Ответить  
 
 автор: cheops   (31.01.2011 в 13:40)   письмо автору
 
   для: technic611   (31.01.2011 в 12:59)
 

Да, так как функция array_diff() сравнивает одномерные массивы.

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

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