[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сравнение двух массивов.
chupakabre
Пытаюсь сравнить два массива, что для реализации поиска, но никак не пойму чем и как правильно сделать, постоянно получаются бесконечные циклы.


Array
(
[name] =>
[stuff] =>
[price]=>
[date1] =>
[date2] =>
[post_type] =>
)



SimpleXMLElement Object
(
[startDate] =>
[Name] =>
[stuffName] =>
[regionNameRu] =>
[postType] =>
[price] =>5
[ticketsTo] => SimpleXMLElement Object
)

)


Хочется реализовать что то похожее на поиск где первый массив получает данные POST'ом, а второй через simplexml_load_file подгружает данные.



Спустя 52 минуты, 59 секунд (20.04.2011 - 13:24) sergeiss написал(а):
Интересно... Только я один не понял, что хотел спросить ТС?

Спустя 1 час, 22 минуты, 14 секунд (20.04.2011 - 14:46) chupakabre написал(а):
Хмм...первый массив это $_POST отправленный с текст боксов, второй вытащен из XML. Это получается как поиск по категориям, [name] сравниваем с [Name], если есть совпадения то передаем информацию если нет то нет.

Спустя 39 минут, 37 секунд (20.04.2011 - 15:25) sergeiss написал(а):
ОК... Проходи циклом for по массиву POST. И сравнивай ключи из массива ПОСТ и из второго массива. При совпадении - выполняешь действия.

Как это сделать... Это просто smile.gif Подумай сам для начала.

Спустя 8 минут, 14 секунд (20.04.2011 - 15:34) chupakabre написал(а):
У меня бесконечный цикл получаеться, или выводит все по первому совпадению игноря другие.

Спустя 3 минуты, 9 секунд (20.04.2011 - 15:37) Renden написал(а):
chupakabre
Приведи пример кода. Как у тебя получается бесконечный цикл?

Спустя 2 минуты, 2 секунды (20.04.2011 - 15:39) chupakabre написал(а):
Renden
я сейчас пытаюсь через XML вытянуть то что мне надо, так что я цикл удалил.

Спустя 46 секунд (20.04.2011 - 15:40) chupakabre написал(а):
а так обычный foreach c if внутри пробывал.

Спустя 38 минут, 52 секунды (20.04.2011 - 16:18) sergeiss написал(а):
Ты код покажи... А не описывай его smile.gif

Спустя 20 минут (20.04.2011 - 16:38) chupakabre написал(а):
$y = 0;
for($_POST; count($sxml); $y++){

if($_POST[a]==$sxml[a]){
}
echo $_POST[b];
if($_POST[c]==$sxml[b]){
}
echo $_POST[d];
if($_POST[Stars]==$sxml[c]){
}
echo $_POST[f];break;

}


Я смутно если честно представляю, как это все работать должно я думал все будет легче. Думал тут рекурсия спасет, что бы сравнить все и вся, но моих мозгов не хватило.

Кратко объясню что и как я думал

у меня на форме 3 выпадающих списка и одна кнопка, графы (почтовая доставка, товар, город (это как тест делалось)) город пока в XML один, товара 3 штуки, почтовых служб 3.....По факту выбирая 1 элемент (город к примеру) я должен получить все записи.....так и есть, но при выборе почтовой слудбы он не сокращает круг поиска, а выводит все почтовые службы. МОих знаний и опыта тут явно не хватает.

Спустя 8 минут, 22 секунды (20.04.2011 - 16:47) sergeiss написал(а):
Во-первых, я говорил про цикл foreach, а не цикл for. Используя foreach, ты можешь не знать ключи массива, но спокойно перебрать его.

Во-вторых, что такое ключи a,c,d,f, Starts у ПОСТа???

И еще - используй тэги оформления кода, находятся справа над полем ввода (кнопки PHP, SQL, ....)

Спустя 6 минут, 33 секунды (20.04.2011 - 16:53) chupakabre написал(а):
Цитата
Во-вторых, что такое ключи a,c,d,f, Starts у ПОСТа???


Это как пример, в переменных ошибок нету, я постоянно все дампом проверяю. Проблема именно в цикле. Я не могу понять синтаксически, что во что вложить.

Спустя 3 часа, 15 минут, 19 секунд (20.04.2011 - 20:09) Renden написал(а):
chupakabre
Ну во 1-х у тя echo не внутри условий, во 2-х for у тя не останавливается так как нет условия, и зачем ты считаешь Y если ты его не используешь, твой пример должен быть хотя-бы таким:

for ($y = 0; count($sxml)>$y; $y++) {
if($_POST[a]==$sxml[a])
echo $_POST[b];
if($_POST[c]==$sxml[b])
echo $_POST[d];
if($_POST[Stars]==$sxml[c])
echo $_POST[f];
}


А проще форечем перебрать


foreach ($sxml as $val) {
if($_POST[a] == $val)
echo $_POST[b];
if($_POST[c] == $val)
echo $_POST[d];
if($_POST[Stars] ==$val)
echo $_POST[f];
}

Спустя 16 часов, 9 минут, 44 секунды (21.04.2011 - 12:18) chupakabre написал(а):
foreach ($sxml as $val) {
if($_POST[a] == $val)
echo $_POST[b];
if($_POST[c] == $val)
echo $_POST[d];
if($_POST[Stars] ==$val)
echo $_POST[f];
}


Не сравнивает так, игнорит.

Спустя 16 минут, 59 секунд (21.04.2011 - 12:35) Renden написал(а):
chupakabre
ну значит нет совпадений или вывод пустой (одного из твоих постов), + кавычки надо ставить внутри $_POST['a'] и тп.

Спустя 32 минуты, 3 секунды (21.04.2011 - 13:07) chupakabre написал(а):
Цитата
ну значит нет совпадений или вывод пустой (одного из твоих постов), + кавычки надо ставить внутри $_POST['a'] и тп.



Не не просто решение другое немного было


for ($y = 0; count($sxml)>$y; $y++) {
if ($_POST[a] == $sxml->row[$y]->a){
echo $_POST[b];
}
}


Вот так все работает, а как сделать форичом я пока не понимаю.

Еще вопрос хотел бы теоретический задать, я могу ведь 3х этажный иф писать ? Примерно такое в псевдо коде:

if(условие){
if(условие and условие and условие){
действие
}
}



Спустя 1 час, 11 минут, 9 секунд (21.04.2011 - 14:19) sergeiss написал(а):
Блин... Ну элементарно же!!!!

Допустим, есть массив $_POST и простой массив $arr, надо сравнить их ключи и при совпадении что-то сделать.
foreach( $_POST as $k => $v )
{
if( isset( $arr[ $k ] ) )
{
// делаем это "что-то"
}
}

Если вторая часть для сравнения не массив, а более сложный объект (но в нем каким-то образом задействовано имя ключа из массива ПОСТ), то используем "переменные переменные".

Спустя 27 минут, 5 секунд (21.04.2011 - 14:46) chupakabre написал(а):
Да оказалось элементарно, и ошибка из за невнимательности.
Быстрый ответ:

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