[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сравнение элементов массива
13_demon_89
ДОброго времени суток. Помоги понять ошибку. Суть: идет сравнение двух числовых последовательностей, а именно сравнение значений двух массивов, один из которых берется из БД, а второй формируется на странице. Последний массив формируется исходя из условий(см. ниже) сравнения. Подозреваю, что ошибка и заключается в неправильном написании условий. Отмечу, что элементы массива - целые числа.

//последовательность запроса получает значения из формы с чекбоксами
$y[]=$_POST['step1'];
$y[]=$_POST['step2'];
$y[]=$_POST['step3'];
$y[]=$_POST['step4'];
$y[]=$_POST['step5'];
$y[]=$_POST['step6'];
$y[]=$_POST['step7'];
$y[]=$_POST['step8'];
$wer = implode("",$y); //объединяем в строку
echo 'Последовательность запроса='.$wer.'<br />';
//подключение опустил
if(isset($_POST['go'])){
$result=mysql_query('SELECT * FROM avto');// делаем выборку из таблицы
while($row=mysql_fetch_array($result))// берем результаты из каждой строки
{
$wer=$row['ch_posl']; //выбор из столбца ch_posl
echo 'Последовательность из базы='.$wer.'<br />';// выводим данные
$x = explode("/",$wer); //послед из базы разбиваем строку на массив $x[]
}}

//ПРАВИЛА
//цифра 1

if(($y[0])== $x[0])
$zer[0]="1";
if(($y[0]+1)== $x[0])
$zer[0]="9";
if(($y[0]+2)==$x[0])
{$zer[0]="0";}
if(($y[0]+3)==$x[0])
{$zer[0]="0";}
if(($y[0]-1)==$x[0])
{$zer[0]="2";}
if(($y[0]-2)==$x[0])
{$zer[0]="3";}
if(($y[0]-3)==$x[0])
{$zer[0]="4";}

//цифра 2
if($y[1]==$x[1])
{$zer[1]="1";}
if(($y[1]+1)==$x[1])
{$zer[1]="4";}
if(($y[1]+2)==$x[1])
{$zer[1]="0";}
if(($y[1]+3)==$x[1])
{$zer[1]="0";}
if(($y[1]-1)==$x[1])
{$zer[1]="2";}
if(($y[1]-2)==$x[1])
{$zer[1]="3";}
if(($y[1]-3)==$x[1])
{$zer[1]="4";}
//цифра 3
if($y[2]==$x[2])
{$zer[2]="1";}
if(($y[2]+1)==$x[2])
{$zer[2]="6";}
if(($y[2]+2)==$x[2])
{$zer[2]="0";}
if(($y[2]+3)==$x[2])
{$zer[2]="0";}
if(($y[2]+4)==$x[2])
{$zer[2]="0";}
if(($y[2]+5)==$x[2])
{$zer[2]="0";}
if(($y[2]-1)==$x[2])
{$zer[2]="2";}
if(($y[2]-2)==$x[2])
{$zer[1]="3";}
if(($y[2]-3)==$x[2])
{$zer[1]="4";}
if(($y[2]-4)==$x[2])
{$zer[1]="5";}
if(($y[2]-5)==$x[2])
{$zer[1]="6";}

//цифра 4
if($y[3]==$x[3])
{$zer[3]="1";}
if(($y[3]+1)==$x[3])
{$zer[3]="5";}
if(($y[3]+2)==$x[3])
{$zer[3]="0";}
if(($y[3]+3)==$x[3])
{$zer[3]="0";}
if(($y[3]+4)==$x[3])
{$zer[3]="0";}
if(($y[3]-1)==$x[3])
{$zer[3]="2";}
if(($y[3]-2)==$x[3])
{$zer[3]="3";}
if(($y[3]-3)==$x[3])
{$zer[3]="4";}
if(($y[3]-4)==$x[3])
{$zer[3]="5";}

$str = implode("/",$zer); //объединяем в строку
echo 'Последовательность сравнения= '.$str.'';




Спустя 4 минуты, 24 секунды (26.01.2012 - 20:19) Winston написал(а):
Цитата (13_demon_89 @ 26.01.2012 - 19:15)
Помоги понять ошибку.

Так, а в чем ошибка?

Спустя 6 минут, 3 секунды (26.01.2012 - 20:25) 13_demon_89 написал(а):
Массив $zer[] не формируется или формируется но не соответствует условиям)

Спустя 1 минута, 50 секунд (26.01.2012 - 20:27) inpost написал(а):
Включи в начале
error_reporting(E_ALL);

И ещё, правильно составленный вопрос - 50% того, что получишь на него ответ.

Спустя 9 минут, 31 секунда (26.01.2012 - 20:37) 13_demon_89 написал(а):
Вот ошибки:
Notice: Undefined offset: 1 in A:\home\localhost\www\dip\expert.php on line 214
Notice: Undefined offset: 2 in A:\home\localhost\www\dip\expert.php on line 229
Notice: Undefined offset: 3 in A:\home\localhost\www\dip\expert.php on line 259
строки попадают на условия:

if(($y[3]-4)==$x[3])
if(($y[2]-1)==$x[2])
if($y[1]==$x[1])
Т.е. ошибка в цифре, что указывает на элемент массива

Спустя 19 минут, 29 секунд (26.01.2012 - 20:56) 13_demon_89 написал(а):
Задача: сформировать и вывести массив $zer[] используя правила сравнения элементов массива $x[] с $y[].

Спустя 1 час, 43 минуты, 43 секунды (26.01.2012 - 22:40) walerus написал(а):
13_demon_89 - Что за привычка такая ? строки ошибок цитировать и код, не соответствуя последовательности ????
Может так нужно ?

Notice: Undefined offset: 1 in A:\home\localhost\www\dip\expert.php on line 214
Notice: Undefined offset: 2 in A:\home\localhost\www\dip\expert.php on line 229
Notice: Undefined offset: 3 in A:\home\localhost\www\dip\expert.php on line 259

Я конечно за компактность кода, но читабельность тоже как бы приятная вещь, пробелы поставить никак?
if( $y[1] == $x[1] )
if( ( $y[2] - 1 ) == $x[2] )
if( ( $y[3] - 4 ) == $x[3] )


Сделай вывод переменных, чтоб понять что в них находится.
Это перед ПРАВИЛАМИ.

print_r($y);
print_r($x);

Это перед формированием строки $str в конце скрипта

print_r($zer);


Тогда как то понятнее будет, в чем проблема.

Спустя 2 часа, 45 минут, 39 секунд (27.01.2012 - 01:25) 13_demon_89 написал(а):
Господа, ошибка где-то тут:

if(isset($_POST['go']))
{
$result=mysql_query('SELECT * FROM avto');// делаем выборку из таблицы
while($row=mysql_fetch_array($result))// берем результаты из каждой строки
{
$wer=$row['ch_posl']; //выбор из столбца ch_posl
$x = explode("/",$wer); //послед из базы разбиваем строку на массив $x[]
}}

Т.е., получается, что при выборке из столбца ch_posl, все значения тоже заносятся в массив Array ( [0] => 14623761 [1] => 42682412 ). Возникает вопрос, как разбить каждый элемент массива $row на массив $x? сравнение по правилам должно произойти со всеми записями таблицы бд столбца ch_posl, и, соответственно, кол-во конечных массивов должно быть равно кол-ву записей в таблице. Но, записи то постоянно увеличиваются, неужели придется каждый раз дописывать код при добавлении новой записи в бд? Есть ли решение этой проблемы? Спасибо за внимание)

Спустя 7 минут, 23 секунды (27.01.2012 - 01:33) inpost написал(а):
$x[] = explode("/",$wer);
Будет многомерный, каждый раз дописываться, а не перезаписываться!
Или foreach запихни между explode и $x.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.