Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение массивов сохраняя ключи. нужно сохранить ключи 
V
    Опции темы
capitan
Дата 24.6.2008, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



Собственно вопрос такой:
Есть два массива.
Код

$array1 = array('1', '2', '2', '3', '2');
$array1 = array('1', '3', '2', '1', '2');


нужно найти пересечение и показать их. ОБЯЗАТЕЛЬНО сохранив ключи.
array_intersect_assoc() - находит значения, но ключи не сохраняет.

Кто что предложит?



PM MAIL WWW ICQ   Вверх
skyboy
Дата 24.6.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(capitan @  24.6.2008,  15:12 Найти цитируемый пост)
ОБЯЗАТЕЛЬНО сохранив ключи.

а если значения - совпадают, а ключи разные? какой ключ брать? из первого массива или из второго?
вопрос №2: почему не пройтись при помощи цикла и получить то, что тебе надо?
PM MAIL   Вверх
bars80080
Дата 24.6.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



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

$array1 = array('1', '2', '2', '3', '2');
$array2 = array('1', '3', '2', '1', '2');
for($i = 0; isset($array1[$i]) && isset($array2[$i]); $i++) {
if($array1[$i] == $array2[$i]) $array3[$i] = 1;
else $array3[$i] = 0;
}
 собсна, всё

Это сообщение отредактировал(а) bars80080 - 24.6.2008, 16:32
PM MAIL WWW   Вверх
sTa1kEr
Дата 24.6.2008, 16:39 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(capitan @  24.6.2008,  17:12 Найти цитируемый пост)
array_intersect_assoc() - находит значения, но ключи не сохраняет.

Сохраняет.

Цитата(skyboy @  24.6.2008,  17:22 Найти цитируемый пост)
а если значения - совпадают, а ключи разные?

То в результирующий массив оно вообще не попадет, т.к.
Цитата

Computes the intersection of arrays with additional index check


Цитата(skyboy @  24.6.2008,  17:22 Найти цитируемый пост)
какой ключ брать? из первого массива или из второго?

Без проверки индексов, обычно остается индекс из первого масива. Считается что первый массив - master array.

Цитата(capitan @  24.6.2008,  17:12 Найти цитируемый пост)
Кто что предложит?

Предлагаю назвать переменные по-разному.

Это сообщение отредактировал(а) sTa1kEr - 24.6.2008, 16:44
PM MAIL   Вверх
capitan
Дата 26.6.2008, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



bars80080, 
Я впринципе  так и сделал. Думал может есть вариант попроще.

Поясню более конкретно.
Предположим есть 5 ячеек, которые пользователь заполняет определенными числами. При нажании на Готово,- формируется массив:
Код

$array1 = array('1', '2', '2', '3', '2');


Который сравнивается с правильным вариантом:
Код

$array2 = array('1', '3', '2', '1', '2');


И далее, неправильно заполненные поля пользователем подсвечиваются.
А за правильные начисляются балы. Вот для чего нужно сохранять ключи. Чтобы сделать подсветку.
Т.е. в двух массивах должна совпадать пара ключ-значение.

Но все равно всем спасибо за участие. Если никто более простого варианта не предложит, тему можно закрывать.


PM MAIL WWW ICQ   Вверх
bars80080
Дата 26.6.2008, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



capitan, функция array_intersect_assoc(), как говорит sTa1kEr, то что вам нужно,
сами проверьте: 
Код
<?php
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result_array = array_intersect_assoc($array1, $array2);

var_dump($result_array);
?>

PM MAIL WWW   Вверх
Feldmarschall
Дата 26.6.2008, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



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

Это сообщение отредактировал(а) Feldmarschall - 26.6.2008, 19:25
PM   Вверх
bars80080
Дата 26.6.2008, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



или вам нужно, чтобы на месте не совпавших значений были именно нули? но из этого можно выкрутится
PM MAIL WWW   Вверх
capitan
Дата 26.6.2008, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



bars80080, 
array_intersect_assoc() покажет схождение массивов, а мне нужно расхождение, чтобы их подсветить. Думаю подойдет только перебор массивов со сравнением.

Код

foreach($array1 as $key=>$line) {
      if($line != $array2[$key]) { 
           $i = $key+1;              
           ?>
            <script>
               $('cart_<?=$i;?>').style.backgroundColor = '#E16E49';
            </script>
            <?
            $i = 0;
       }
}        
            

Feldmarschall, 
Цитата(Feldmarschall @  26.6.2008,  14:59 Найти цитируемый пост)
в цикле пройти по первому массиву, сравнивая его с первым.

Ответ не верный. Не вижу смысла сравнивать массив сам с собой.
Всем спасибо, тема закрыта.

PM MAIL WWW ICQ   Вверх
Feldmarschall
Дата 26.6.2008, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Молодец, несмотря на опечатку, понял, как сделать =)
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0550 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.