Перейти к содержанию

Рекомендуемые сообщения

Есть 2 массива. В первом хранятся айди всех товаров. Во втором, айди избранных товаров. Мне нужно, сравнить эти айди и если есть совпадения - провести некоторые манипуляции. Делаю так:

foreach ($array1 as $value1) {
	foreach ($array2 as $value2) {
		if($value1 != $value2){
			$var = '0';
		}
		else{
			$var = '1';
		}
	}
}

Как я понимаю - должно все работать. Но у меня не выходит ($var равна 0 всегда). Ткните носом, что не так делаю. Спасибо!

$array1:
Array
(
    [0] => 10441
    [1] => 13302
    [2] => 13546
    [3] => 10500
    [4] => 10102
    [5] => 10119
    [6] => 10435
    [7] => 10785
    [8] => 10439
    [9] => 13199
    [10] => 10833
    [11] => 10343
    [12] => 10338
    [13] => 10101
    [14] => 13771
    [15] => 10443
    [16] => 10341
    [17] => 13268
    [18] => 10111
    [19] => 10113
    [20] => 10354
    [21] => 10114
    [22] => 10115
    [23] => 10116
    [24] => 10112
    [25] => 10517
    [26] => 10104
    [27] => 10108
    [28] => 10107
    [29] => 10118
    [30] => 10442
    [31] => 10314
    [32] => 10150
    [33] => 10106
    [34] => 10105
    [35] => 10110
    [36] => 14252
)

$array2:
Array
(
    [0] => 13199
    [1] => 10439
    [2] => 10435
    [3] => 10500
    [4] => 13302
    [5] => 10441
)

 

Изменено пользователем davyduck

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
foreach ($array1 as $value1) {
        if (!in_array($value1, $array2) {
            $var = '0';
        } else {
            $var = '1';
        }
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
foreach (array_intersect($array1, $array2) as $item) {
	...	
}

 

  • +1 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для чего я это делаю. Первый массив (как писал выше) выводит айди товаров, второй айди выбраных товаров. Если айди одинаковые в переменную $checked заношу слово "checked" (таким образом хочу оставлять выбранными чекбоксы товаров которые уже в избранных). 

foreach($array1 as $value1){
	if(in_array($value1, $array2)){
		$data['checked'] = 'checked';
	}else{
		$data['checked'] = '';
	}
} 

Смотрю в код и понимаю, что все должно работать. Но не работает. Все чекбоксы получают checked. Не хочу что бы кто-то написал готовый код. Хочу разобраться в проблеме. Толкните советом. Спасибо!

 

<input type="checkbox" name="ID[]" value="<?php echo $item['ID']?>" <?php echo $checked;?>>

Так же, буду благодарный за более элегантный совет решения моей задачи :) 

Изменено пользователем davyduck

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я могу лишь предположить как устроен ваш массив в контроллере но примерно как я это вижу:

$array2 = array(13199,10439,10435,10500,13302,10441);

$data['items'] = array();

$items = array(); //здесь вы получаете данные

if ($items) {
  foreach ($items as $item) {
    $data['items'][] = array(
      'id' => $item['id'],
      'checked' => (in_array($item['id'], $array2)) ? 'checked' : '' 
    );
  }
}

это так в контроллере может быть.

 

<input type="checkbox" name="id[]" value="<?php echo $item['id']?>" <?php echo $item['checked']?>>

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
22 часа назад, davyduck сказал:

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

 

22 часа назад, davyduck сказал:

Так же, буду благодарный за более элегантный совет решения моей задачи

Вы хотите разобраться или получит решение  ?

 

Если сами, тогда логика такая, получаете дифф  $data['diff'] = array_intersect($array1, $array2); тут будет ваша выборка id чего-то там

Дальше, в tpl проверяете если ли в массиве значение, и добавляете чек  <input ....  <?= in_array($id, $diff) ? 'checked' : ''; ?>

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем спасибо за советы!) Разобрался во всех вопросах)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.