Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Сравнение двух многомерных массивов, Очень нужна помощь
espltd  
 ۩     Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 7
Пользователь №: 43630
На форуме: 11 дней
Карма:




Все бодрого дня! Нужна помощь от всезнаек) Есть массив объектов такого вида:
Не могу и не понимаю как решить данную задачу: У меня на сайте 2 выпадающих списка, при выборе параметров идет аякс запрос по событию change и подгружается табличка на основе выбранных параметров. Данные селекты(вып.списки) - одинаковы! Суть такова, что мне надо сравнить совпадает ли поле первого с полем вторым, т.е. если в 1 объекте в массиве compl в поле [pole] содержится Б, и во втором тоже тогда ставим +, а если не содержиться, тогда -. Т.е. это сравнение. Надо сделать именно сравнение, чтобы получилось табличка: Но совершенно не понимаю как это правильно делают. Бьюсь уже 3-ий день, безрезультат! Помогите пожалуйста кто знает или умеет. Заранее, спасибо))

массив 1 массив 2
Подсветка + -
Подогрев - +
Линейка - -
Термостат + +


Array
(
[
0] => ComplectOption Object
(
[
'compl'] => Array
(
[
complectation_id] => 189
[title_group] => Дизайн
[title_option] => Бамперы в цвет кузова
[pole] => Б
)
)

[
1] => ComplectOption Object
(
[
'compl'] => Array
(
[
complectation_id] => 189
[title_group] => Дизайн
[title_option] => Решетка радиатора черного цвета
[pole] => -
)
)
)



PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25980
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 20 дней
Карма: 725

Не курю:
1 год, 2 месяца, 6 дней


и в цикле пробовал сравнивать?


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
espltd  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 7
Пользователь №: 43630
На форуме: 11 дней
Карма:




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

Бамперы в цвет кузова • •
Решетка радиатора черного цвета • •
Наружные зеркала и ручки дверей черного цвета - •
Наружные зеркала в цвет кузова • -
Ручки дверей в цвет кузова с хромированным эл • -
Накладки на пороги • -

Отличный пример есть на сайте http://renault-perm.ru/compl/new-logan
Это один в один то что нужно! Не понимаю и даже представления не имею как это сделать
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1355
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 5 дней
Карма: 77




Ну можно как-то так
http://sandbox.onlinephpfunctions.com/code...8b1755f4e6eeaf5
$array = 
[

0 =>
[

'compl' =>
[

'complectation_id' => 189,
'title_group' => 'Дизайн',
'title_option' => 'Бамперы в цвет кузова',
'pole' => 'Б'
]
],


1 =>
[

'compl' =>
[

'complectation_id' => 189,
'title_group' => 'Дизайн',
'title_option' => 'Решетка радиатора черного цвета',
'pole' => '-'
]
]

];


$result = my($array[0], $array[1]);
print_r($result);

function my($val1, $val2, $a = [], $key = 0){

if (is_array($val1)){
foreach ($val1 AS $key=>$val){
$a = my($val, $val2[$key], $a, $key);
}

}
else {
if ($val1 == $val2)
$a['plus'][$key] = $val1;
else
$a['minus'][$key] = [$val1, $val2];
}

return $a;
}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walerus  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чтобы все !
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1965
Пользователь №: 26852
На форуме: 5 лет, 8 месяцев, 18 дней
Карма: 111




Ребят, я вообще смутно понимаю что хочет ТС...

В топике пишет - нужно СРАВНЕНИЕ ("мне надо сравнить"), хотя дальше, пишет ("Отличный пример есть на сайте ..."), но там НЕТ сравнения, это простая таблица с характеристиками, той или иной модели, а СРАВНЕНИЕ идет уже у нас в голове.

И в итоге, зачем циклы, проверки, рекурсивные функции ???, не ужели не проще при генерации таблицы, просто смотреть поле - "pole", и если там стоит минус "-", то рисовать минус, если НЕ минус, рисовать плюс "+"...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25980
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 20 дней
Карма: 725

Не курю:
1 год, 2 месяца, 6 дней


walerus
ты прав.
а список параметров - составить из 2х массивов с array_diff()


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
espltd  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 7
Пользователь №: 43630
На форуме: 11 дней
Карма:




Ребят, подождите, возможно я не верно истолковал. Ну а как это правильно называется?
Разве это не сравнение? Ведь речь идет именно о сравнении, вернее в первом массиве в pole есть такая опция, а во втором массиве pole нет, соответственно выстраивается таблица. Сравнение я имею ввиду, что мы при выборе параметров из селектов получаем в одном поле +, а в другом -, ну на сайте в данном случае точки вместо + проставлены. Просто я не знаю как это правильно сделать? Есть две выборки по параметрам из селектов, где каждая выборка достает массив объектов, который я вам показал в примере. Подскажите пожалуйста, как правильно это сделать, чтобы таблица получилась на основе этих 2 -х выбранных параметрах да еще и показать где +, а где -, у меня огромная каша в голове. Помогите пожалуйста до конца добить задачку. Никогда просто такое не делал(

массив 1 массив 2
true false
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5491
Пользователь №: 35718
На форуме: 4 года, 14 дней
Карма: 167




espltd, сравнивать надо не друг с другом, а с неким эталонным эфемерным продуктом у которого есть все опции всех продуктов участвующих в сравнении (два и более)


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
espltd  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 7
Пользователь №: 43630
На форуме: 11 дней
Карма:




Ребят, помогите плиз. Не доходит. walerus написал, что не проще сравнить поле и в зависимости от этого проставить либо +, либо -. Тогда у меня лично возникает вопрос, как второй то массив подключить в эту же связку со вторым параметром, чтобы это было едино?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
espltd  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 7
Пользователь №: 43630
На форуме: 11 дней
Карма:




Ребят, если можно, пришлите пожалуйста по кусочку кода, кто как бы реализовал такую штуку, как на этом сайте из массива объектов, который я предоставил? http://renault-perm.ru/compl/new-logan Мне нужно один в один! только вместо кружков из поля буду + доставаться

PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1355
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 5 дней
Карма: 77




espltd
Ты строишь таблицу не по выбранным объектам сравнения (в примере машины), а по Категориям и подкатегориям относящиеся к товару. У тебя будет ключ каждой категории/подкатегории.
Вот по этим ключам и смотри значение товара.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
espltd  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 7
Пользователь №: 43630
На форуме: 11 дней
Карма:




Решал более сложные задачки, но почему-то это не укладывается в голове совершенно. Блин, написать бы какую нить функцию, чтобы передать 2 параметра, и опр. поле и на выходе таблица с расхождением значения pole
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25980
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 20 дней
Карма: 725

Не курю:
1 год, 2 месяца, 6 дней


у тебя есть 2 товара со своими свойствами

$product1 = array('width'=>'10 mm', 'height'=>'20 мм', 'color'=>'blue');
$product2 = array('width'=>'15 mm', 'height'=>'62 мм', 'ac/dc'=>'220 v', 'battery'='yes');


тебе не нужно сравнивать их - тубе нужно составить табличку со свойствами этих товаров рядом и показать
- что есть у одного и нет у другого
- или есть у обоих, но разное

для этого собери все свойства товаров

$property1 = array_keys($product1);
$property2 = array_keys($product2);


объедени их

$property = array_merge($property1,$property2);



вообщем целиком это так


<?php
$product1 = array('width'=>'10 mm', 'height'=>'20 мм', 'color'=>'blue');
$product2 = array('width'=>'15 mm', 'height'=>'62 мм', 'ac/dc'=>'220 v', 'battery'=>'yes');

$property1 = array_keys($product1);
$property2 = array_keys($product2);

$propertys = array_merge($property1,$property2);

$unic_propertys = array_unique($propertys);

$table = "<table>\n<tr>\n<th>Property</th>\n<th>Product1</th>\n<th>Product2</th>\n</tr>\n";

foreach($unic_propertys as $v){
$val1 = isset($product1[$v]) ? $product1[$v] : '-';
$val2 = isset($product2[$v]) ? $product2[$v] : '-';
$table .= "<tr>\n<td>{$v}</td>\n<td>{$val1}</td>\n<td>{$val2}</td>\n</tr>\n";
}

$table .= "</table>";

echo $table;


на выходе

<table>
<
tr>
<
th>Property</th>
<
th>Product1</th>
<
th>Product2</th>
</
tr>
<
tr>
<
td>width</td>
<
td>10 mm</td>
<
td>15 mm</td>
</
tr>
<
tr>
<
td>height</td>
<
td>20 мм</td>
<
td>62 мм</td>
</
tr>
<
tr>
<
td>color</td>
<
td>blue</td>
<
td>-</td>
</
tr>
<
tr>
<
td>ac/dc</td>
<
td>-</td>
<
td>220 v</td>
</
tr>
<
tr>
<
td>battery</td>
<
td>-</td>
<
td>yes</td>
</
tr>
</
table>


с тебя 500 рублей лентяй.


Цитата
Мне нужно один в один!

ага, щас в загс сбегаю разведусь, с работы уволюсь и приступлю.
время есть подождать? или прям срочно ?


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walerus  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чтобы все !
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1965
Пользователь №: 26852
На форуме: 5 лет, 8 месяцев, 18 дней
Карма: 111




набросал на коленке... если что то не то, пиши конкретнее какие данные
Портянка


<?php

/*

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

Array
(
[Access_1.6_МКП5_(82_л.с.)] => Array
(
[0] => Array
(
[compl] => Array
(
[complectation_id] => 1
[title_group] => Дизайн
[title_option] => Бамперы в цвет кузова
[pole] => +
)

)

[1] => Array
(
[compl] => Array
(
[complectation_id] => 2
[title_group] => Дизайн
[title_option] => Решетка радиатора черного цвета
[pole] => +
)

)

[2] => Array
(
[compl] => Array
(
[complectation_id] => 3
[title_group] => Дизайн
[title_option] => Наружные зеркала и ручки дверей черного цвета
[pole] => +
)

)

[3] => Array
(
[compl] => Array
(
[complectation_id] => 4
[title_group] => Дизайн
[title_option] => Наружные зеркала в цвет кузова
[pole] => -
)

)

)

[Luxe_Privilege_1.6_АКП4_(102_л.с.)] => Array
(
[0] => Array
(
[compl] => Array
(
[complectation_id] => 1
[title_group] => Дизайн
[title_option] => Бамперы в цвет кузова
[pole] => +
)

)

[1] => Array
(
[compl] => Array
(
[complectation_id] => 2
[title_group] => Дизайн
[title_option] => Решетка радиатора черного цвета
[pole] => +
)

)

[2] => Array
(
[compl] => Array
(
[complectation_id] => 3
[title_group] => Дизайн
[title_option] => Наружные зеркала и ручки дверей черного цвета
[pole] => -
)

)

[3] => Array
(
[compl] => Array
(
[complectation_id] => 4
[title_group] => Дизайн
[title_option] => Наружные зеркала в цвет кузова
[pole] => +
)

)

)
*/

// И так, у нас выбраны две машины

$selected_avto = array(
'Access_1.6_МКП5_(82_л.с.)', // ключ 0
'Luxe_Privilege_1.6_АКП4_(102_л.с.)' // ключ 1
);

// Выбрана група для показа, не стал брать все, что бы не удлинять "портянку"
$selected_group = 'Дизайн'; // Выбран дизайн, переменная нигде не учтена, объявлена просто для ясности дела

/*

"Создали массив" :))

между моделями всего два отличия
Наружные зеркала и ручки дверей черного цвета + -
Наружные зеркала в цвет кузова - +

*/

$list_avto = array(
'Access_1.6_МКП5_(82_л.с.)' => array(
array(
'compl' => array(
'complectation_id' => '1',
'title_group' => 'Дизайн',
'title_option' => 'Бамперы в цвет кузова',
'pole' => '+'
)
),

array(
'compl' => array(
'complectation_id' => '2',
'title_group' => 'Дизайн',
'title_option' => 'Решетка радиатора черного цвета',
'pole' => '+'
)
),

array(
'compl' => array(
'complectation_id' => '3',
'title_group' => 'Дизайн',
'title_option' => 'Наружные зеркала и ручки дверей черного цвета',
'pole' => '+'
)
),

array(
'compl' => array(
'complectation_id' => '4',
'title_group' => 'Дизайн',
'title_option' => 'Наружные зеркала в цвет кузова',
'pole' => '-'
)
)
),

'Luxe_Privilege_1.6_АКП4_(102_л.с.)' => array(
array(
'compl' => array(
'complectation_id' => '1',
'title_group' => 'Дизайн',
'title_option' => 'Бамперы в цвет кузова',
'pole' => '+'
)
),

array(
'compl' => array(
'complectation_id' => '2',
'title_group' => 'Дизайн',
'title_option' => 'Решетка радиатора черного цвета',
'pole' => '+'
)
),

array(
'compl' => array(
'complectation_id' => '3',
'title_group' => 'Дизайн',
'title_option' => 'Наружные зеркала и ручки дверей черного цвета',
'pole' => '-'
)
),

array(
'compl' => array(
'complectation_id' => '4',
'title_group' => 'Дизайн',
'title_option' => 'Наружные зеркала в цвет кузова',
'pole' => '+'
)
)
)
);



/*
Дальше отрисовываем таблицу, стиль скомуниздил с их сайта, для наглядности :)
*/

?>
<!-- HTML BLOCK -->

<
style>
.
mblock {
cursor: pointer;
background: #e8e8e8;
}
</style>

<!--
TABLE BEGIN -->
<
table style="width: 50%; border: 1px solid #ccc; border-collapse: collapse;">
<
thead></thead>
<
tbody>
<
tr class="mblock" id="63">
<
td style="padding: 5px;">
<
b><span class="block">Дизайн</span></b>
</
td>
<
td style="padding: 5px;">
<
b><span class="block"><?php
echo $selected_avto[0]; // Название первой машины
?></span></b>
</
td>
<
td style="padding: 5px;">
<
b><span class="block"><?php
echo $selected_avto[1]; // Название второй машины
?></span></b>
</
td>
</
tr>
<?php

// Перебираем все параметры комплектации
foreach( $list_avto[ $selected_avto[0] ] as $list_key => $list_value ){
// $list_key используем ключ, для второго массива
?>
<tr class="block_63">
<
td style="border-bottom: 1px solid #ccc; font-size: 12px; padding: 3px;">
<?=$list_value['compl']['title_option']; ?>
</td>
<
td style="border-bottom: 1px solid #ccc; font-size: 12px; width: 80px;">
<?=$list_value['compl']['pole']; ?>
</td>
<
td style="border-bottom: 1px solid #ccc; font-size: 12px;">
<?=$list_avto[ $selected_avto[1] ][$list_key]['compl']['pole']; ?>
</td>
</
tr>

<?php
}

// ну вроде как ничего особого, если я все правильно понял...

?>
</tbody>
</
table>
<!--
TABLE END -->
<!--
HTML BLOCK END-->

то что получилось

Присоединённое изображение
Присоединённое изображение
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walerus  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чтобы все !
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1965
Пользователь №: 26852
На форуме: 5 лет, 8 месяцев, 18 дней
Карма: 111




Игорь_Vasinsky
Цитата
с тебя 500 рублей лентяй.
каждому laugh.gif
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса