05.01.2017, 15:32
|
Профессор
|
|
Регистрация: 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']);
}
}
|
|
05.01.2017, 17:22
|
Профессор
|
|
Регистрация: 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.
|
|
05.01.2017, 17:53
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
Sav2907,
почему 6 а не 4?
|
|
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
|
|
06.01.2017, 06:33
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Sav2907
|
Результат 6, а у вас 3.
|
Если ваши данные будут идти в ином порядке, то и ваш код, и рони покажет иной результат. Если опять перемешать массив, опять новый.
|
|
06.01.2017, 09:22
|
Профессор
|
|
Регистрация: 15.09.2015
Сообщений: 180
|
|
рони,
205
265
205
203
265
45
|
|
06.01.2017, 09:27
|
Профессор
|
|
Регистрация: 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>';
|
|
06.01.2017, 09:39
|
Профессор
|
|
Регистрация: 15.09.2015
Сообщений: 180
|
|
Результат на более тяжелом примере
|
|
06.01.2017, 09:40
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
А чем это по сути отличается от предыдущего?
sort($rows); - это ведь пустое и никчемное действие, если судить по структуре массива представленного ранее.
Я так и не понял закономерности этой кухни, но, если записи возвращаются в произвольном порядке, то вхождения каждой итерации нужно искать во всем массиве. При этом, если нечто удовлетворяющее условию в нем найдено и это считается уникальностью, то она должна исключаться из исходного массива.
|
|
06.01.2017, 09:54
|
Профессор
|
|
Регистрация: 15.09.2015
Сообщений: 180
|
|
laimas,
отличается тем, что проверяется весь массив. А на счет sort($rows);, вы правы
|
|
|
|