PHP比较两个数组中的特定字符


PHP Compare specific characters betwen two arrays

在PHP中,我有这样的数组:

Array
(
    [0] => 09:26-DOWN
    [1] => 09:26-UP
    [2] => 09:26-UP
    [3] => 09:26-UP
    [4] => 09:26-UP
    [5] => 09:26-UP
    [6] => 09:26-UP
    [7] => 09:26-UP
    [8] => 09:26-DOWN
    [9] => 09:26-UP
    [10] => 09:26-UP
    [11] => 09:26-UP
    [12] => 09:26-UP
    [13] => 09:26-UP
    [14] => 09:26-UP
    [15] => 09:26-UP
    [16] => 09:26-UP
    [17] => 09:26-UP
)

我想把它和下面的数组进行比较,只和最后一个字符(向上和向下)进行比较:

Array
(
    [0] => 09:31-DOWN
    [1] => 09:31-UP
    [2] => 09:31-UP
    [3] => 09:31-UP
    [4] => 09:31-UP
    [5] => 09:31-UP
    [6] => 09:31-UP
    [7] => 09:31-UP
    [8] => 09:31-UP
    [9] => 09:31-UP
    [10] => 09:31-UP
    [11] => 09:31-UP
    [12] => 09:31-UP
    [13] => 09:31-UP
    [14] => 09:31-UP
    [15] => 09:31-UP
    [16] => 09:31-UP
    [17] => 09:31-UP
)

因此,目的是检查它在特定时间之间是上升还是下降。

不太确定要做什么,但这里有一个简单的选项。假设每个元素的格式总是相同的,即HH:II-[UP or DOWN],您可以这样做:

$result = array();
foreach ($arr1 as $k=>$v) {
    $result[] = $v[6] . $arr2[$k][6];
}

给定两个数组$arr1$arr2,这将产生第三个数组,如:

Array
(
    [0] => DD
    [1] => UU
    [2] => UU
    [3] => UU
    [4] => UU
    ....
)

然后,您可以使用此数组的值UUDDUDDU来计算每个位置中的内容。例如,键3将具有UU,所以您知道它是UP,UP。。。。

查看演示

<小时>

更新以下是使用array_map()的单行版本

$result = array_map(function($a, $b){return $a[6] . $b[6];}, $arr1, $arr2);

请参阅演示2

尝试使用strstr()+trim()来分割状态/状态。

$changed = []; // to store changed statuses
foreach($old as $i => $value){
    $from = trim(strstr($value, '-'), '-');   // getting status (UP / DOWN) from first array
    $to   = trim(strstr($new[$i], '-'), '-'); // getting status (UP / DOWN) from second array
    if($from != $to){ // if statuses are different
        $changed[$i] = [
            'from' => $from,
            'to'   => $to
        ]; // add to changed array
    }
}

完整示例:

<?php
header('Content-Type: text/plain; charset=utf-8');
$old = [
    '09:26-DOWN',
    '09:26-UP',
    '09:26-UP',
    '09:26-UP',
    '09:26-UP',
    '09:26-UP',
    '09:26-UP',
    '09:26-UP',
    '09:26-DOWN',
    '09:26-UP',
    '09:26-UP',
    '09:26-UP',
    '09:26-UP',
    '09:26-UP',
    '09:26-UP',
    '09:26-UP',
    '09:26-UP',
    '09:26-UP'
];
$new = [
    '09:31-DOWN',
    '09:31-UP',
    '09:31-UP',
    '09:31-UP',
    '09:31-UP',
    '09:31-UP',
    '09:31-UP',
    '09:31-UP',
    '09:31-UP',
    '09:31-UP',
    '09:31-UP',
    '09:31-UP',
    '09:31-UP',
    '09:31-UP',
    '09:31-UP',
    '09:31-UP',
    '09:31-UP',
    '09:31-UP'
];
$changed = [];
foreach($old as $i => $value){
    $from = trim(strstr($value, '-'), '-');
    $to   = trim(strstr($new[$i], '-'), '-');
    if($from != $to){
        $changed[$i] = [
            'from' => $from,
            'to'   => $to
        ];
    }
}
print_r($changed);
?>

输出:

Array
(
    [8] => Array
        (
            [from] => DOWN
            [to] => UP
        )
)

给两个数组

<?php 
$array1 = array('UP', 'DOWN', 'UP', 'DOWN');
$array2 = array('UP', 'DOWN', 'DOWN', 'UP');
foreach ($array2 as $key => $new_value)
{
    $old_value = $array1[$key];
    $new_array[$key] = ($old_value <= $new_value ? (($old_value < $new_value) ? 'UP' : 'NO CHANGE') : 'DOWN');
}
var_dump($new_array);

将输出类似于此的内容

array(4) {
  [0]=>
  string(9) "NO CHANGE"
  [1]=>
  string(9) "NO CHANGE"
  [2]=>
  string(4) "DOWN"
  [3]=>
  string(2) "UP"
}