У меня есть функция для расчета расстояния, данные берутся из базы данных.
Вот код для расчета:
function jarak() {
global $conn;
$query1 = mysqli_query($conn, "SELECT signature, sig_priority FROM centro");
$query2 = mysqli_query($conn, "SELECT signature, sig_priority, status FROM acid_event");
while ($row = mysqli_fetch_array($query1, MYSQLI_ASSOC)) { $master[]=$row; }
while ($row = mysqli_fetch_array($query2, MYSQLI_ASSOC)) { $data[]=$row; }
$jarak = array();
foreach ($data as $key => $val) {
foreach ($master as $key2 => $value) {
$jarak = sprintf("%0.2f",sqrt(pow($val['signature'] - $value['signature'], 2) + pow($val['sig_priority'] - $value['sig_priority'], 2)));
echo "distance from (" . $value['signature'] . "," . $value['sig_priority'] . ") ke (" . $val['signature'] . "," . $val['sig_priority'] . ") is : " . $jarak . "<br>";
$euc[]=$jarak;
}
}
}
И вот результат:
Array(
[0] => 30.04
[1] => 0.00
[2] => 30.04
[3] => 0.00
[4] => 47.00
[5] => 17.03
[6] => 5.02
[7] => 25.08
[8] => 2.06
[9] => 32.06
[10] => 37.00
[11] => 7.07 )
Я хочу сравнить каждый массив из 2 индексов с большим или меньшим, чем. Пример: [0] с [1], [2] с [3], [4] с [5] и так далее. Его просто сравнивают с 2 индексом.
Я пробовал это, но безрезультатно
for ($i=0; $i<count($cb); $i++) {
for ($k=0;$k<2;$k++) {
if ($cb[$i][$k]<$cb[$i][$k]) {
echo "low";
} elseif ($cb[$i][$k]>$cb[$i][$k]) {
echo "high";
}
}
}
Результат, который я хочу, должен выглядеть так
if [0] <[1], то «высокий» и цикл для другого массива индексов, например [2] с [3], [4] с [5] и так далее.
Я должен спросить, @Beadyyy. Это домашнее задание? И второе по важности: что вы пробовали?
@AnkitAgarwal обновленный вопрос
@Rafael нет, это не моя домашняя работа, и я пытался сделать много типов циклов, но это пошло не так (обновленный вопрос)
Ваша спецификация немного размыта - вам нужно найти пары индексов, между которыми есть наименьшее расстояние? Т.е. [0] - [2] и [1] - [3] будут иметь нулевое расстояние - будут ли эти пары индексов ответом на вашу проблему?






Я принял решение, но решил сохранить ответ в виде массива, потому что для меня имеет смысл прочитать эту информацию в другом месте позже.
Вот мое решение:
$test = array(
30.04,
0.00,
30.04,
0.00,
47.00,
17.03,
5.02,
25.08,
2.06,
32.06,
37.00,
7.07,
);
$output = array();
foreach ($test as $key => $value) {
// To make sure this will only be executed every second item
if ($key % 2 !== 0) {
continue;
}
$next = '';
if (!isset($test[$key+1])) {
break;
} else {
$next = $test[$key+1];
}
$output[$key] = $value . ' is ' . ($value < $next
? "lower"
: ($value > $next
? 'higher'
: 'equal')) . ' than ' . $next;
}
echo '<pre>';
print_r($output);
Вот протестированный код: https://3v4l.org/Pg5La
Я думаю, что вы были довольно близки к тому, чего хотели достичь, но похоже, что вы усложняли задачу, чем они должны были быть.
Ваш код ниже.
for ($i=0; $i<count($cb); $i++) {
for ($k=0;$k<2;$k++) {
if ($cb[$i][$k]<$cb[$i][$k]) {
echo "low";
} elseif ($cb[$i][$k]>$cb[$i][$k]) {
echo "high";
}
}
}
Как вы можете видеть, ваши операторы if сравнивают одни и те же значения друг с другом, это мало что даст. Но я вижу, что вы пытались сделать во втором цикле for.
Вместо этого мы действительно хотим перемещаться по вашему массиву с шагом 2.
for ($i=0; $i<count($cb); $i+=2) {
//stuff
}
Таким образом, мы можем сравнить первый элемент и следующий за ним элемент друг с другом. Нравится:
if ($cb[$i] > $cb[$i+1]) {
echo $i . 'is higher than '. $i+1;
} elseif ($cb[$i] < $cb[$i+1]) {
echo $i . 'is lower than '. $i+1;
} else {
echo $i . 'is the same as '. $i+1;
}
Итак, все вместе это будет примерно так:
for ($i=0; $i<count($cb); $i+=2) {
if ($cb[$i] > $cb[$i+1]) {
echo $i . 'is higher than '. $i+1;
} elseif ($cb[$i] < $cb[$i+1]) {
echo $i . 'is lower than '. $i+1;
} else {
echo $i . 'is the same as '. $i+1;
}
}
Теперь вы можете изменить эхо на все, что хотите, и, вероятно, вам также следует добавить некоторую проверку (например, проверить, действительно ли существуют ключи перед доступом к ним), но это хорошее место для начала.
Какого результата вы ожидаете?