我有2个数组,例如1000个密钥,一个保存温度值,另一个保持小时。
示例数组temp:
[0] = 3.1
[1] = 4.3
[2] = 4.1
[3] = 5.1
[4] = 4.1
小时数组示例:
[0] = 0
[1] = 1
[2] = 2
[3] = 3
[4] = 3
这个问题是,当我将这些组合到数组并将其绘制成例如pchart时,我在X上有太多的值,它会变得混乱。
所以我需要删除重复的小时数然后用“NULL”替换,这样就不会在x轴上绘制不需要的小时数了。
我想保留数组中的第一个小时,第二个到重复的结尾可以设置为“NULL”
小时输出数组应为:
[0] = 0
[1] = 1
[2] = 2
[3] = 3
[4] = NULL
etc.
答案 0 :(得分:3)
听起来像是array_unique()
的工作。
array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )
获取一个输入数组并返回一个没有重复值的新数组。
请注意,密钥会被保留。 array_unique()对处理的值进行排序 首先作为字符串,然后将保持每个遇到的第一个键 值,并忽略所有后续键。它并不意味着关键 将保留未排序数组的第一个相关值。
注意:当且仅当
(string) $elem1 === (string) $elem2
时,才认为两个元素相等。用文字表示:当字符串表示相同时。将使用第一个元素。
如果您需要保留数组键,可以尝试使用array_map()
。
<?php
//Variable initialization
$array = array(
0 => 0,
1 => 1,
2 => 2,
3 => 3,
4 => 3
);
$temp = array();
$array = array_map(function($element) use (&$temp) {
if (!in_array($element, $temp)) {
$temp[] = $element;
return $element;
}
return null;
}, $array);
print_r($array);
答案 1 :(得分:2)
您的数组已排序,所以......这个怎么样?
$hours = array(0,1,2,3,3,4,4,5);
$prev = -1;
foreach ($hours as &$hour) {
if ($prev === $hour) {
$hour = NULL;
}
else {
$prev = $hour;
}
}
unset($hour);
print_r($hours); // 0,1,2,3,NULL,4,NULL,5...
答案 2 :(得分:1)
如果您使用的是php 5.3:
$a = array(0,1,2,3,4,4,5);
array_walk($a, function(&$item) {
static $encountered = array();
if(in_array($item, $encountered)) {
$item = null;
return;
}
$encountered[] = $item;
});
var_dump($a);
将保留密钥数量。 Array_walk为每个键调用用户函数。 static使得函数范围内的$ encounter数组保持在执行之间。
答案 3 :(得分:0)
如果您想完全删除重复项,可以使用array_unique() 但它不会将它们设置为NULL。
答案 4 :(得分:-2)
也许这个技巧可以做到:
$simplified = array_combine($hours, $temperatures);
$hours = array_keys($simplified);
$temperatures = array_values($simplified);
这不会将事物设置为NULL,而是完全删除它们,我认为这是你正在寻找的。否则应该这样做:
foreach(array_slice(array_reverse(array_keys($hours)), 0, -1) as $i)
($hours[$i] === $hours[$i-1]) && $hours[$i] = NULL;