- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Помогите пожалуйста. Уже 2 суток не могу придумать рациональный вариант. В голове только говнокод. :(
Есть массив $h и массив $m. Необходимо найти сколько массивов $m содержится в массиве $h.
Пример:
Проблема в том, что код должен работать для любого набора $m. Элементы в массиве $m не будут повторяться.
При этом было бы неплохо еще и удалить найденные пары из массива. Только я это даже не знаю, как придумать.
Спасибо большое заранее.
На php не знаю как написать код, поэтому напишу вариант на ruby, из названия методов смысл думаю понятен
C руби я к сожалению совершенно не знаком. По-этому не понял вот эту строчку совсем:
intersections = a.each_slice(b.size).to_a.select { |arr| arr == b }function check($m, $h) {
$counts = array();
foreach($h as $v) {
if (in_array($v, $m)) {
if (!isset($counts[$v])) { $counts[$v] = 0; }
$counts[$v]++;
}
}
return count($counts) == count($m) ? min($counts) : 0;
}
вот так должно работать.
Этот код будет всегда возвращать количество элементов в массиве $m.
Этот код будет всегда возвращать количество элементов в массиве $m.
Этот код будет всегда возвращать количество элементов которые пересекаются в обоих массивов. А исходя из того, что элементы в массиве $m не будут повторятся, array_unique уникализирует получившийся массив, получая таким образом требуемый результат - количество пар в массивах которые есть и в первом и во втором массиве.
Этот код будет всегда возвращать количество элементов которые пересекаются в обоих массивов. А исходя из того, что элементы в массиве $m не будут повторятся, array_unique уникализирует получившийся массив, получая таким образом требуемый результат - количество пар в массивах которые есть и в первом и во втором массиве.
я аж полез было проверять документацию :)
$h = array('a', 'b', 'f', 'r', 'b', 'v', 'r', 'b', 't', 'a');
$m = array('a', 'b', 'f', 'r', 'v');
$result = check($m, $h);
должно быть 1, а ваш код дает 5.
вот интереснее вариант:
function check($m, $h) {$hh = array_count_values($h);
$mm = array_combine($m, $m);
$nn = array_intersect_key($hh, $mm);
return count($nn) == count($m) ? min($nn) : 0;
}
должно быть 1, а ваш код дает 5.
Почему 1? Там пять элементов встречаются. Или я не понял суть задачи.
Тогда не понимаю почему у ТСа
//Ищем пары 'a', 'b' расположенные в любом порядке в массиве $h.
//$result должен быть: 2
//Потому что пара a, b встречается 2 раза. А непарная оставшаяся b - не подходит.
Тогда не понимаю почему у ТСа
всё правильно у него с условием :)
"Необходимо найти сколько массивов $m содержится в массиве $h".
берете и поштучно вычеркиваете массивы $m, а не элементы массива $m
Самый простой вариант в случае строгого порядка следования элементов и перегретой на жаре головы - это собрать массив в строку (CSV или схожее если размер элементов динамический), после чего рассматривать полученное как строку, производя поиск и замену строковыми функциями.