Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818

Сравнить ключи массивов

08.02.2016, 14:09. Показов 5399. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1 массив

PHP
1
2
3
4
5
6
7
8
9
10
$tariff_month_periods = array(
    0  => GetMessage('none'),
    1  => GetMessage('1_month'),
    2  => GetMessage('2_month'),
    3  => GetMessage('3_month'),
    6  => GetMessage('6_month'),
    9  => GetMessage('9_month'),
    12 => GetMessage('1_year'),
    24 => GetMessage('2_year'),
);
2 массив такого вида, но данные всегда разные

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(
    [0] => 799.00
    [1] => 799.00
    [2] => 799.00
    [3] => 799.00
    [4] => 799.00
    [5] => 799.00
    [6] => 799.00
    [7] => 799.00
    [8] => 799.00
    [9] => 710.23
    [10] => 710.23
    [11] => 710.23
    [12] => 665.84
    [13] => 665.84
    [14] => 665.84
    [15] => 665.84
    [16] => 665.84
    [17] => 665.84
    [18] => 621.46
    [19] => 621.46
    [20] => 621.46
    [21] => 621.46
    [22] => 621.46
    [23] => 621.46
    [24] => 599.25
)
нужно сравнить совпадение ключей и если ключи равны и в ключе второго массива что-то лежит, то присвоить в новый массив значение ключа первого массива. как-то так нужен хэлп!!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.02.2016, 14:09
Ответы с готовыми решениями:

Ключи глобальных массивов в кавычках или без?
Доброго времени суток! Как правильно записывать ключи (правильно ли их называть ключами?) в глобальных массивах - в кавычках или без? ...

Как сравнить значение и ключ двух массивов в PHP?
Всем привет! Начал изучать PHP, хочу написать скрипт, который через форму методом GET передает слово и это слово преобразует в морзянку....

Сравнить несколько массивов
сравнить несколько массивов вывести тот в котором наибольшее количество совпадений.

20
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
08.02.2016, 14:24
наверное, ужас мне в голову пришел и, наверно, не верный, но вот...
PS тока не сильно бейте...
Код при условии, что сравнивается 2 ключа, по одному из каждого массива.
PHP
1
2
3
4
5
6
7
8
9
10
11
$arr1 = [......];
$arr2 = [......];
$result = array_diff_key($arr1, $arr2);
if(is_array($result))
    {
        foreach($result as $item)
            {
                $arr3[] = $item;
                break;
            }
    }
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
08.02.2016, 14:54  [ТС]
У меня как-то вот так сработало

PHP
1
2
3
4
5
6
$ar_periods=[];
foreach($price as $key => $value){
    if((isset($tariff_month_periods[$key]) && ($value != 0))){
        $ar_periods[] = $tariff_month_periods[$key];
    }
}
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
08.02.2016, 15:01
Цитата Сообщение от Mashka_mulashka Посмотреть сообщение
и в ключе второго массива что-то лежит
тогда лучше не
PHP
1
$value != 0
а
PHP
1
$value != NULL
ИМХО, так правильней
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
08.02.2016, 15:26
Цитата Сообщение от Пифагор Посмотреть сообщение
ИМХО, так правильней
Тогда уж так можно...
PHP
1
if((isset($tariff_month_periods[$key],$value))
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
08.02.2016, 15:36
Azdeman, никогда не видел запись таким способом.
Как ее правильно читать?

Добавлено через 1 минуту
это эквивалент
PHP
1
isset($tariff_month_periods[$key] && isset($value)
?

Добавлено через 2 минуты
и еще просьба:
прокомментируйте, плз, мой чудо-код. бред или будет работать в данном случае???
PHP
1
2
3
4
5
6
7
8
9
10
11
$arr1 = [......];
$arr2 = [......];
$result = array_diff_key($arr1, $arr2);
if(is_array($result))
    {
        foreach($result as $item)
            {
                $arr3[] = $item;
                break;
            }
    }
0
162 / 161 / 66
Регистрация: 28.06.2015
Сообщений: 576
08.02.2016, 15:36
Цитата Сообщение от Пифагор Посмотреть сообщение
это эквивалент
Почти (скобку пропустили)
PHP
1
isset($tariff_month_periods[$key]) && isset($value)
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
08.02.2016, 16:20
Цитата Сообщение от Пифагор Посмотреть сообщение
никогда не видел запись таким способом.
isset () может принимать более чем 1 параметр.
bool isset ( mixed $var [, mixed $... ] )
var
Проверяемая переменная.
...
Другая переменная
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
08.02.2016, 16:32
Понял. А во насчет моей просьбы код прокомментировать, если не сложно. Он вот чуть вверх подняться...
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
08.02.2016, 16:41
Да и у у вас вариант годный, проверяем расхождение ключей в массивах... что еще сказать, сравнивает ключи первого массива с ключами 2-го. и на выходе ключи 1 массива которых нет в 2-м массиве.

Только как мне показало не по заданию совсем.. в задании же не расхождения узнать. а как раз таки узнать совпадения и добавить в новый массив ключи 2 го массива.
1
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
08.02.2016, 16:47
Azdeman, спасибо.
просто я когда писал, мне показалось, что ерунда какая то получится...
Надо в код свой верить))))
Еще раз спасибо.
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
08.02.2016, 17:09
PHP
1
2
3
4
5
6
<?php
$array1 = array('blue'  => 1, 'red'  => 2,'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);
$arr = array_intersect_key($array1, $array2);
    print_r($arr);
    ?>
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
08.02.2016, 17:56  [ТС]
ребят, задача оказалась сложнее чем кажется) нужно еще в новый массив добавить такие ключи, которые отличаются от следующего, но при этом проверить на наличие пустых тоже нужно...вот теперь вообще ужас
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
08.02.2016, 18:25
Возможна не так.
PHP
1
2
3
4
5
6
7
8
9
<?php
$array1 = array('blue'  => 1, 'red'  => 2,'purple' => 4,"");
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7);
         $a = array_filter($array1);//убераем  " " 
         $b = array_filter($array2);//убераем " " 
$arr[] = array_intersect_key($a, $b); //схождение ключей
$arr[] = array_diff_key($a,$b); // расхождение ключей
print_r($arr);
    ?>
Ну или что бы наглядней было, ааа нужно в разные массивы просто поместить схождение и расхождение.
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
08.02.2016, 18:49  [ТС]
неправильно задачу поставила

вот второй массив

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(
    [0] => 799.00
    [1] => 799.00
    [2] => 799.00
    [3] => 799.00
    [4] => 799.00
    [5] => 799.00
    [6] => 799.00
    [7] => 799.00
    [8] => 799.00
    [9] => 710.23
    [10] => 710.23
    [11] => 710.23
    [12] => 665.84
    [13] => 665.84
    [14] => 665.84
    [15] => 665.84
    [16] => 665.84
    [17] => 665.84
    [18] => 621.46
    [19] => 621.46
    [20] => 621.46
    [21] => 621.46
    [22] => 621.46
    [23] => 621.46
    [24] => 599.25
)
здесь 8 и 9 элемент различаются, значит 9 ключ нужно тоже добавить в третий массив. но при этом возможет второй массив вида

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Array
(
    [0] => 0
    [1] => 0
    [2] => 0
    [3] => 0
    [4] => 0
    [5] => 0
    [6] => 0
    [7] => 0
    [8] => 0
    [9] => 0
    [10] => 0
    [11] => 0
    [12] => 1249.92
    [13] => 1249.92
    [14] => 1249.92
    [15] => 1249.92
    [16] => 1249.92
    [17] => 1249.92
    [18] => 1249.92
    [19] => 1249.92
    [20] => 1249.92
    [21] => 1249.92
    [22] => 1249.92
    [23] => 1249.92
    [24] => 1124.93
)
здесь различаются 11 и 12 элемент, значит в третий массив нужно добавить 12 элемент.
при всем этом нужно сравнивать все это с первым массивом на соответствие ключей....

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

Добавлено через 5 минут
т.е. ключи сходятся постоянно, значения расходятся. а схождение ключей нужно проверять у 1 и 2 массива
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
08.02.2016, 22:16
PHP
1
var_dummp(array_intersect_assoc($arr1, $arr2));
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
09.02.2016, 11:35  [ТС]
Цитата Сообщение от Poznakomlus Посмотреть сообщение
var_dummp(array_intersect_assoc($arr1, $arr2));
но нужно ключи проверять

Добавлено через 31 минуту
Чет в итоге вот такое получилось

PHP
1
2
3
4
5
for($i = 0; $i <= 25; $i++){
    if($price[$i++] != $price[$i]){
       $ar_periods[$i++] = $price[$i++];
    }
}
почти все нужные значения достаю, но для некоторых условие не срабатывает (хотя должно)...

Добавлено через 3 минуты
если поменять условие

PHP
1
2
3
4
5
for($i = 0; $i <= 24; $i++){
    if($price[$i] != $price[$i++]){
       $ar_periods[$i] = $price[$i];
    }
}
то вообще в if не заходит, притом, что массив такого вида

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Array
(
    [0] => 0
    [1] => 0
    [2] => 0
    [3] => 0
    [4] => 0
    [5] => 0
    [6] => 0
    [7] => 0
    [8] => 0
    [9] => 0
    [10] => 0
    [11] => 0
    [12] => 1249.92
    [13] => 1249.92
    [14] => 1249.92
    [15] => 1249.92
    [16] => 1249.92
    [17] => 1249.92
    [18] => 1249.92
    [19] => 1249.92
    [20] => 1249.92
    [21] => 1249.92
    [22] => 1249.92
    [23] => 1249.92
    [24] => 1124.93
)
Добавлено через 15 минут
скажите, почему при таком условии только 1 раз заходит и все?

PHP
1
2
3
4
5
for($i = 0; $i < 24; $i++){
    if($price[$i++] !== $price[$i]){
       $ar_periods[$i] = $price[$i];
    }
}
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
09.02.2016, 11:48
попробуйте префиксом сделать
PHP
1
2
3
4
5
for($i = 0; $i < 24; $i++){
    if($price[++$i] !== $price[$i]){
       $ar_periods[$i] = $price[$i];
    }
}
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
09.02.2016, 12:01  [ТС]
так вообще пустой массив возвращается

Добавлено через 4 минуты
в условие не заходит опять же
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
09.02.2016, 12:18
вот так
PHP
1
2
3
4
5
for($i = 0; $i < 24; $i++){
    if($price[$i++] !== $price[$i]){
       $ar_periods[$i] = $price[$i];
    }
}
возвращались только нечетные ключи, видимо поэтому в if только раз заходило.

а вот так если? должно получится.
PHP
1
2
3
4
5
6
for($i = 0, $j = 0; $i < 24; $i++){
    if($price[$j] !== $price[$i]){
       $ar_periods[$i] = $price[$i];
             $j++;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2016, 12:18
Помогаю со студенческими работами здесь

Задача: Сравнить ячейки массивов
Прошу помочь сделать задачи! буду очень благодарен! Заранее огромное спасибо! 1. Сравнить ячейки массивов 2. Движущаяся мишень 3....

Сравнить попарно элементы двух массивов
Пользователь задает два массива одинаковой длины. Нужно сравнить первый элемент одного массива с первым элементом второго массива, второй...

Сравнить соответствующие элементы каждой пары массивов
Заданы пары массивов одинаковой размерности: два массива целых чисел и два массива вещественных чисел. Сравнить соответствующие элементы...

Сравнить первые и вторые элементы массивов (максимум, минимум)
Помогите, пожалуйста, с задачей по C: &quot;Даны координаты n точек на плоскости, найти прямоугольник, объемлющий все эти точки.&quot; ...

Сравнить значения двух массивов и вывести результат в третий массив
Добрый день программисты и те кто любит пощёлкать клавишами. Есть такая задача. Нужно написать программку, которая сравнивала бы значения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru