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

时间:2014-08-27 02:36:38

标签: php arrays compare character specifications

在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
)

我希望将它与下面的数组进行比较,只与最后一个字符(UP和DOWN)进行比较:

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
)

所以目的是检查它是否在特定时间之间上升或下降。

3 个答案:

答案 0 :(得分:3)

不完全确定你要做什么,但这是一个简单的选择。假设每个元素的格式总是相同的,即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 ....

See demo


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

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

See demo 2

答案 1 :(得分:1)

尝试使用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
        )

)

答案 2 :(得分:1)

给出两个数组

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