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

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

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

Author24 — интернет-сервис помощи студентам
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2016, 14:09
Ответы с готовыми решениями:

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

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

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

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

20
2169 / 1652 / 840
Регистрация: 10.01.2015
Сообщений: 5,190
08.02.2016, 14:24 2
наверное, ужас мне в голову пришел и, наверно, не верный, но вот...
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
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
08.02.2016, 14:54  [ТС] 3
У меня как-то вот так сработало

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
2169 / 1652 / 840
Регистрация: 10.01.2015
Сообщений: 5,190
08.02.2016, 15:01 4
Цитата Сообщение от Mashka_mulashka Посмотреть сообщение
и в ключе второго массива что-то лежит
тогда лучше не
PHP
1
$value != 0
а
PHP
1
$value != NULL
ИМХО, так правильней
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
08.02.2016, 15:26 5
Цитата Сообщение от Пифагор Посмотреть сообщение
ИМХО, так правильней
Тогда уж так можно...
PHP
1
if((isset($tariff_month_periods[$key],$value))
0
2169 / 1652 / 840
Регистрация: 10.01.2015
Сообщений: 5,190
08.02.2016, 15:36 6
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 7
Цитата Сообщение от Пифагор Посмотреть сообщение
это эквивалент
Почти (скобку пропустили)
PHP
1
isset($tariff_month_periods[$key]) && isset($value)
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
08.02.2016, 16:20 8
Цитата Сообщение от Пифагор Посмотреть сообщение
никогда не видел запись таким способом.
isset () может принимать более чем 1 параметр.
bool isset ( mixed $var [, mixed $... ] )
var
Проверяемая переменная.
...
Другая переменная
0
2169 / 1652 / 840
Регистрация: 10.01.2015
Сообщений: 5,190
08.02.2016, 16:32 9
Понял. А во насчет моей просьбы код прокомментировать, если не сложно. Он вот чуть вверх подняться...
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
08.02.2016, 16:41 10
Да и у у вас вариант годный, проверяем расхождение ключей в массивах... что еще сказать, сравнивает ключи первого массива с ключами 2-го. и на выходе ключи 1 массива которых нет в 2-м массиве.

Только как мне показало не по заданию совсем.. в задании же не расхождения узнать. а как раз таки узнать совпадения и добавить в новый массив ключи 2 го массива.
1
2169 / 1652 / 840
Регистрация: 10.01.2015
Сообщений: 5,190
08.02.2016, 16:47 11
Azdeman, спасибо.
просто я когда писал, мне показалось, что ерунда какая то получится...
Надо в код свой верить))))
Еще раз спасибо.
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
08.02.2016, 17:09 12
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
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
08.02.2016, 17:56  [ТС] 13
ребят, задача оказалась сложнее чем кажется) нужно еще в новый массив добавить такие ключи, которые отличаются от следующего, но при этом проверить на наличие пустых тоже нужно...вот теперь вообще ужас
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
08.02.2016, 18:25 14
Возможна не так.
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
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
08.02.2016, 18:49  [ТС] 15
неправильно задачу поставила

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

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
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
08.02.2016, 22:16 16
PHP
1
var_dummp(array_intersect_assoc($arr1, $arr2));
0
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
09.02.2016, 11:35  [ТС] 17
Цитата Сообщение от 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
2169 / 1652 / 840
Регистрация: 10.01.2015
Сообщений: 5,190
09.02.2016, 11:48 18
попробуйте префиксом сделать
PHP
1
2
3
4
5
for($i = 0; $i < 24; $i++){
    if($price[++$i] !== $price[$i]){
       $ar_periods[$i] = $price[$i];
    }
}
0
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
09.02.2016, 12:01  [ТС] 19
так вообще пустой массив возвращается

Добавлено через 4 минуты
в условие не заходит опять же
0
2169 / 1652 / 840
Регистрация: 10.01.2015
Сообщений: 5,190
09.02.2016, 12:18 20
вот так
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
09.02.2016, 12:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.02.2016, 12:18
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru