php - 比较单个数组中的每个索引

标签 php arrays compare

我有一个计算距离的函数,数据来自数据库。

计算代码如下:

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] then "high"并循环其他索引数组,例如 [2] 与 [3]、[4] 与 [5] 等等。

最佳答案

我认为你已经非常接近你想要完成的目标,但似乎你让事情变得比他们需要的更困难。

您的代码如下。

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

现在您可以将回显更改为您想要执行的任何操作,并且您可能还应该添加一些验证(例如在访问 key 之前检查 key 是否确实存在),但这是一个很好的起点。

关于php - 比较单个数组中的每个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52004365/

相关文章:

javascript - Map 或 flatmap 的工作方式类似于 Javascript 中的 Array.prototype.join

function - 检查 Go 中首先完成的任务是什么?

java-8 - Comparator.comparing() 函数如何工作?

java - 为什么我的字符串比较代码不起作用?

php - 如何使用仪表板在 WordPress 中创建 PHP 文件

php - “Elasticsearch”在刷新索引之前搜索文档

javascript - 精确字符串匹配文件名数组 JavaScript/Nodejs

php - 在 php 中选择 mysql 缺少的列

PHP - 高效显示内联 SVG 图像

php - 将 PHP 数组保存到 MySQL?