Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 05.01.2017, 15:32
Профессор
Отправить личное сообщение для Sav2907 Посмотреть профиль Найти все сообщения от Sav2907
 
Регистрация: 15.09.2015
Сообщений: 180

Спасибо, мое решение на PHP:
foreach ($data as $employeeid => $rows) {
			sort($rows);
			for ($i = 0; $i < count($rows); $i++) {
				$tool1Found = $tool2Found = false;
				if ($i > 0) {
					$previousSetup = $rows[$i - 1];	
					$previousSetup2 = $rows[$i - 2];					
					$tool1Found = in_array($rows[$i]['Tool1Identifier'], $previousSetup) || in_array($rows[$i]['Tool1Identifier'], $previousSetup2);
					$tool2Found = in_array($rows[$i]['Tool2Identifier'], $previousSetup) || in_array($rows[$i]['Tool2Identifier'], $previousSetup1);
				}
				echo sprintf('<br />%s <span style="color: %s;">%s</span> <span style="color: %s;">%s</span>', ($i + 1), ($tool1Found ? 'green' : 'red'), $rows[$i]['Tool1Identifier'], ($tool2Found ? 'green' : 'red'), $rows[$i]['Tool2Identifier']);
			
			}

		}
Ответить с цитированием
  #22 (permalink)  
Старый 05.01.2017, 17:22
Профессор
Отправить личное сообщение для Sav2907 Посмотреть профиль Найти все сообщения от Sav2907
 
Регистрация: 15.09.2015
Сообщений: 180

рони,
Ваш код не работает с массивом
var arr = [[265,205],[265,205],[265,205],[205,205],[265,203],[265,203],[265,203],[203,45]];
Результат 6, а у вас 3.

265
205
205
265
203
45

Последний раз редактировалось Sav2907, 05.01.2017 в 17:24.
Ответить с цитированием
  #23 (permalink)  
Старый 05.01.2017, 17:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Sav2907,
почему 6 а не 4?
Ответить с цитированием
  #24 (permalink)  
Старый 05.01.2017, 17:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Sav2907,
0,205,265,true
1,205,265,false
2,205,265,false
3,205,205,true
4,203,265,true
5,203,265,false
6,203,265,false
7,45,203,true
Ответить с цитированием
  #25 (permalink)  
Старый 06.01.2017, 06:33
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Sav2907
Результат 6, а у вас 3.
Если ваши данные будут идти в ином порядке, то и ваш код, и рони покажет иной результат. Если опять перемешать массив, опять новый.
Ответить с цитированием
  #26 (permalink)  
Старый 06.01.2017, 09:22
Профессор
Отправить личное сообщение для Sav2907 Посмотреть профиль Найти все сообщения от Sav2907
 
Регистрация: 15.09.2015
Сообщений: 180

рони,
205
265
205
203
265
45
Ответить с цитированием
  #27 (permalink)  
Старый 06.01.2017, 09:27
Профессор
Отправить личное сообщение для Sav2907 Посмотреть профиль Найти все сообщения от Sav2907
 
Регистрация: 15.09.2015
Сообщений: 180

laimas,
верно, поэтому новый код
echo '		
		<table><tr><td>Заказ</td><td>Апликатор 1</td><td>Апликатор 2</td></tr>
		';
		foreach ($data as $employeeid => $rows) {
			sort($rows);
			
			for ($i = 0; $i < count($rows); $i++) {
				
				$tool1Found = $tool2Found = false;
				if ($i > 0) {					
					for ($j = $i - 1; $j >= 0; $j--) {
						$previousSetup = $rows[$j];
						$tool1Found = $tool1Found || in_array($rows[$i]['Tool1Identifier'], $previousSetup);
						$tool2Found = $tool2Found || in_array($rows[$i]['Tool2Identifier'], $previousSetup);
						if ($previousSetup['Tool1Identifier'] !== '' && $previousSetup['Tool2Identifier'] !== '') break;
					}
				}				
				echo sprintf('<tr><td>%s</td><td><span style="color: %s;">%s</span></td><td><span style="color: %s;">%s</span></td></tr>', ($i + 1), ($tool1Found ? 'green' : 'red'), $rows[$i]['Tool1Identifier'], ($tool2Found ? 'green' : 'red'), $rows[$i]['Tool2Identifier']);
				
			}
				
		}
		echo '</table>';
Ответить с цитированием
  #28 (permalink)  
Старый 06.01.2017, 09:39
Профессор
Отправить личное сообщение для Sav2907 Посмотреть профиль Найти все сообщения от Sav2907
 
Регистрация: 15.09.2015
Сообщений: 180

Результат на более тяжелом примере
Ответить с цитированием
  #29 (permalink)  
Старый 06.01.2017, 09:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А чем это по сути отличается от предыдущего?

sort($rows); - это ведь пустое и никчемное действие, если судить по структуре массива представленного ранее.

Я так и не понял закономерности этой кухни, но, если записи возвращаются в произвольном порядке, то вхождения каждой итерации нужно искать во всем массиве. При этом, если нечто удовлетворяющее условию в нем найдено и это считается уникальностью, то она должна исключаться из исходного массива.
Ответить с цитированием
  #30 (permalink)  
Старый 06.01.2017, 09:54
Профессор
Отправить личное сообщение для Sav2907 Посмотреть профиль Найти все сообщения от Sav2907
 
Регистрация: 15.09.2015
Сообщений: 180

laimas,
отличается тем, что проверяется весь массив. А на счет sort($rows);, вы правы
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите к js коду, написать html код Modrih Элементы интерфейса 8 16.06.2015 18:08
Ввод диапазона значений массива с клавиатуры Воскобоенко Общие вопросы Javascript 11 06.06.2015 22:34
Фильтр таблицы. Как удалить элемент из массива? leshiple Общие вопросы Javascript 29 13.12.2014 11:19
Сортировка массива по возрастанию другого массива. vas88811 Events/DOM/Window 4 12.01.2014 10:31
Перебор массива - вложенный цикл SWin Общие вопросы Javascript 35 27.12.2013 05:06