Как сделать уникальное комбинирование массива? Array(1,2,3,4); Чтобы получилось так: 1-2 1-3 1-4 2-3 2-4 3-4
PHP: <?php error_reporting ( E_ALL ); $r = Array(1,2,3,4); foreach ( $r as $t ) { foreach ( $r as $y ) { if ( $t < $y ) { printf ( '<p>%d-%d</p>', $t, $y ); } } }
Комбинаторика сложная наука. Не уверен, что сработает всегда и везде, но Более универсален, чем варик выше: PHP: $r=Array(1,2,3,4); foreach($r as $keya => $a){ foreach($r as $keyb => $b){ if($keya === $keyb){ break; } else { $uniq[] = [$a, $b]; } } }
нифига подобного, php7.0 нотисов нема Да и за что, если только необъявленный uniq, если массив на обработку будет передан пустой или с одним значением. Не страшно )) Все эти проверки дело разработчика, а я просто алгоритм дал. Твой будет работать только с цифрами и то лишь в отсортированном массиве. Не ревнуй --- Добавлено --- Хотя вроде да, всегда должен быть нотис. Хз почему нету. Наверное на хосте настройки.
Написал PHP: <?php $r = Array(1,2,3,4); $offset = 0; begin: $n = 0; reset($r); for ($i = $offset; $i > 0; $i--) { next($r); } $out = current($r); while (next($r)) { if (!$n) { echo $out, '-', current($r), '<br>'; } else { $out = $r[$offset]; prev($r); } $n = $n%2 == 0; } $offset++; if ($offset < sizeof($r)) { goto begin; } и сократил PHP: <?php $r = Array(1,2,3,4); for ($offset = 0; $offset < sizeof($r); $offset++, reset($r)) { for ($i = $offset; $i > 0; $i--, next($r)); for ($out = current($r); next($r); print $out . '-' . current($r) . '<br>'); }
А если через sql? У меня стоит задача: Есть 6 полей, если поле не пустое, то выполнем действия. Есть массив этих полей: [Москва,Краснодар,Новороссийск] Мы вносим в дб таким образом: Москва-Краснодар Москва-Новороссийск Новороссийск-Краснодар Но если мы добавляем еще одну запись (массив: [Сочи]) после первого добавления, должно стать так: Москва-Краснодар Москва-Новороссийск Москва-Сочи Краснодар-Сочи Краснодар-Новороссийск Новороссийск-Сочи
если в цифрах была какая то логика, то в городах вовсе не вижу. Да сортировка от запроса ведется DESC ASC была поставлена задача вывести так по такой то инфе. А что может еще придти по другому, меня это не должно канать
Я пробовал получить данные дб таблицы в массив, после объединить с массивом полей, и удалить все записи в таблице, а потом внести, все повторно. Этот вариант не подходит по двум причинам: 1. Еали буде много записей, просто првысит лимит памяти. 2. Если будет заполнено 1 поле из 6, то он заменит последнию запись
Если у тебя проблемы а ля хочу обработать массив, который превышает лимит памяти, значит у тебя неправильно спроектированное приложение/бд. 99,99999999999%
C какой целью тебе надо обрабатывать единовремененно все эти данные и создавать эти странные пути Москва - Вологда и т.д.? Лучше бы ты задачу описал, а не решение своих странные идей просил
Я написал задачу и как должно получиться в конце концов. Есть 6 полей, которые проверяться на пустоту. Нужно вносить в базу комбинированные записи. Если уже есть комбинация, то расширить ее по мере добавления новых записей.
Потому что я вношу эти города через поля. Проще говоря, мне нужно делать пары точек. Налоговая-Дом Налоговая-Офис Дом-Офис
База выглядит таким образом. 0 - точка отправления, 1 - точка прибытия --- Добавлено --- А что ты имел введу под этим?
@Danil005 во-первых, когда у тебя в поля многократно вписаны одни и те же названия, это не структура, а фуфло (https://ru.wikipedia.org/wiki/Нормальная_форма) во-вторых PHP: $r = Array('Питер','Москва','Сочи'); for ($offset = 0; $offset < sizeof($r); $offset++, reset($r)) { for ($i = $offset; $i > 0; $i--, next($r)); for ($out = current($r); next($r); print $out . '-' . current($r) . '<br>'); } Код (Text): Питер-Москва Питер-Сочи Москва-Сочи
Тут все нормально, ибо от Питера до Москвы свой километраж, от Питера до Сочи тоже и т.д. --- Добавлено --- Блин... То что ты написал, это подходит, кроме одного, но, если я введу еще одно название, он не сгруппируется со всеми по этому же принципу.
Нет, не нормально. Нормальная форма - это когда у тебя 300 км не от Питера до Москвы, а от 1 до 2. Не от Питера до Сочи, а от 1 до 3. ???
Да, но как я возьму иды например городских улиц и т.д.? Я делаю сайт для путевых листов. Что конкретно твоих "???". Говорю еще раз. Я написал: Ул.Красная и мне нужно, чтобы эта улица Красная была со всеми точками связанна. от ул. Красная до Питера от ул. Красная до Центр города
Это глупый офтоп, нет, я не он. Просто не могут понять, что я хочу сделать. Пытаюсь объяснить и никто не понимает.)