2

I have a function to calculate distance, the data comes from a database.

Here is the code for calculating:

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;  
        }
    }
}

And here is the result from that:

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 )

I want to compare each 2 index array with greater than or less than. Example : [0] with [1], [2] with [3], [4] with [5] and so on. It just compare with 2 index.

I tried this but no result

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";
        }
    }
}

Output I want should look like this

if [0] < [1] then "high" and it loop for other index array like [2] with [3], [4] with [5] and so on.

5
  • 1
    What is the output you expect? Commented Aug 24, 2018 at 12:20
  • I got to ask, @Beadyyy. Is this a homework? And the second most important: What have you tried? Commented Aug 24, 2018 at 12:26
  • @AnkitAgarwal updated question Commented Aug 24, 2018 at 12:33
  • 1
    @Rafael no, its not my homework and i was try to do many type of loops but it goes wrong (updated question) Commented Aug 24, 2018 at 12:34
  • Your specification is a little bit blurry - Do you need to find index pairs which has smallest distance between ? I.e. [0]-[2] and [1]-[3] will have distance of zero - will these index pairs be an answer to your problem ? Commented Aug 24, 2018 at 12:54

2 Answers 2

1

I think you were quite close to what you wanted to accomplish but it seems like you were making things harder than they needed to be.

Your code is below.

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";
        }
    }
}

As you can see your if statements are comparing the exact same value to each other, that's not going to do much. But I can see what you were trying to do in the second for loop.

Instead, what we really want to do is move through your array in steps of 2.

for ($i=0; $i<count($cb); $i+=2) {
    //stuff
}

This way we can compare the first element and the element after that to each other. Like this:

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;
}

So all together it would be something like this:

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;
    }
}

Now you can change the echo's to whatever you want to do and you should probably add some validation too (like checking if the keys actually exist before accessing them), but this is a good place to get started.

Sign up to request clarification or add additional context in comments.

Comments

1

I did a solution, but I decided to keep the response in an array because it makes more sense to me to be able to read this information somewhere else later.

Here's my solution:

$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);

Here's the code tested: https://3v4l.org/Pg5La

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.