如何检查数组中特定元素的值是否相等

时间:2017-06-16 11:36:43

标签: php

在文件中,我想知道如何检查每个数组的第0个元素是否彼此相等。

例如我有CSV,在循环时我需要比较每个数据的所有日期时间是在同一小时内测量的。

所以PHP

while (($row = fgetcsv($file, 1000, ",")) !== FALSE ){
    if($headerLine){
        $headerLine = false;
    } else {
        print "<pre>";
        print_r($row);
        print "</pre>";
        echo "<hr>";
        echo $row[0];
    }
}

输出将是:

Array
(
    [0] => 2017-06-08 05:00:00
    [1] => 2234
    [2] => name1
    [3] => 0
    [4] => 32
    [5] => 242
    [6] => 324

2017-06-08 05:00:00

Array
(
    [0] => 2017-06-08 05:00:00
    [1] => 322
    [2] => name2
    [3] => 1
    [4] => 34
    [5] => 234
    [6] => 432
)

2017-06-08 05:00:00

...

所以我需要检查每个0行是否相等。

2 个答案:

答案 0 :(得分:0)

在我的头脑中你可以将array_shift与in_array一起使用:

$first_element = array_shift($row);
$result = in_array($first_element, $row);
array_unshift($row, $first_element);

您的测试将获得带有true / false的$ result

答案 1 :(得分:0)

您可以使用array_intersect函数。以下是一个示例用法:

$row1 = ['2017-06-08 05:00:00', 2234, 'name1', 0, 32, 242, 324];
$row2 = ['2017-06-08 05:00:00', 322, 'name2', 1, 34, 234, 432];
$intersect = array_intersect($row1, $row2);
$firstElementEqual = array_key_exists(0, $intersect); // true or false
var_dump(firstElementEqual);

结果:

true

如果要为所有行运行它,请执行以下操作:

$rows = [$row1, $row2]; // put all rows in this array
$intersect = call_user_func_array('array_intersect', $rows));
$firstElementEqualInAllRows = array_key_exists(0, $intersect); // true or false

但是如果你需要知道哪一行是不同的,例如跳过然后运行简单的for循环(这里我将所有行与第一行进行比较)

$rows = [$row1, $row2];
for ($i = 1; $i < count($rows); $i++) {
    $intersect = array_intersect($row[0], $row[1]);
    $firstElementEqual = array_key_exists(0, $intersect); // true or false
}