在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
)
所以目的是检查它是否在特定时间之间上升或下降。
答案 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
....
)
然后,您可以使用此数组的值UU
,DD
,UD
,DU
来确定每个位置的内容。例如,键3将具有UU
,因此您知道它是UP,UP ....
更新 以下是使用array_map()的单行版本:
$result = array_map(function($a, $b){return $a[6] . $b[6];}, $arr1, $arr2);
答案 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"
}