Php数组获取所有重复的值
我有一个Php数组,它的时间值作为数组值,时间戳作为键数组,如下所示:Php数组获取所有重复的值,php,arrays,Php,Arrays,我有一个Php数组,它的时间值作为数组值,时间戳作为键数组,如下所示: array( 144454884=>"12:00am", 145454884=>"12:30am", 144474884=>"1:00am", 144454864=>"1:30am", 143354884=>"1:00am", 144654884=>"1:30am", 1444567584=>"2:00am " ); 上面例子中的时间戳值是不真实的,我写了一个
array(
144454884=>"12:00am", 145454884=>"12:30am", 144474884=>"1:00am", 144454864=>"1:30am", 143354884=>"1:00am", 144654884=>"1:30am", 1444567584=>"2:00am "
);
上面例子中的时间戳值是不真实的,我写了一个例子,它们毫无用处,除非你的时区和我的时区匹配
问题:
我需要得到“1:00am”和“1:30am”两次,我可以得到重复值1次,如回答所示:
我需要将两个值重复两次,同时重复键和值,因为我需要从系统上的周时间中删除这些时间戳,因为夏令时正在重复一个时间,我根本不想显示凌晨1:00,我只想显示此时间不可用。此代码有效:
<?php
$array_new = [];
$array_tmp = [];
$array = array(1=>'1233',2=>'12334',3 =>'Hello' ,4=>'hello', 5=>'U');
//loop trough all elements in array and for ever element create key
//For "world" key is "world"
//For "World" key is "world"
//For "WORLD" key is "world"
//So all this cases have same key and differenet representation eg. "world" => ["world","World","WORLD"]
foreach($array as $k => $v){
$index = strtolower($v);
$array_tmp[$index][] = $v;
}
//loop trough new array with new keys and if there are more than one element(> 1) for some key, all of his representations put in new array
foreach($array_tmp as $k => $v){
if(count($v) > 1){
foreach($v as $k2 => $v2){
$array_new[] = $v2;
}
}
}
echo '<pre>';
print_r($array_new);
echo '<pre>';
保留关键信息的可能解决方案(我会将中间结果分配给它们自己的变量,否则读取时可能会混淆)
将导致:
array(5) {
[144454884] = string(7) "12:00am"
[145454884] = string(7) "12:30am"
[143354884] = string(6) "1:00am"
[144654884] = string(6) "1:30am"
[1444567584] = string(7) "2:00am "
}
array(2) {
[144474884] = string(6) "1:00am"
[144454864] = string(6) "1:30am"
}
我不是100%确定你想要什么,但这是我认为你需要的。
假设您的输入数组被称为$a
$b
将包含一个唯一值数组。
$c
将包含已删除的元素
$b
和$c
的结果如下:
数组中不能有重复的键。。。。数组键必须是唯一的。。。。引用:如果数组声明中的多个元素使用相同的键,只有最后一个会被使用,因为所有其他的都会被覆盖。
我认为如果源代码使用utc时间,然后使用php datetime类转换回您的时间,那么您就不需要处理日光/叶年。我有一个复杂的函数,包含utc时间数组。Andrew在我的服务器时间中,在显示用户的时区。标记是我没有重复的键我有重复的值这两次的时间戳不同,但由于夏令时时钟在2015年10月25日凌晨1:00倒带到英国,所以凌晨1:00和凌晨1:30出现两次,请检查这里,我知道时间变化。。。。结果我多睡了几个小时我需要两个重复值,两个键和值都重复两次
听起来好像你想让多个值使用同一个键(重复
)是的,代码可以工作。你能用一些注释解释一下吗?你能用我的数组作为例子吗。需要知道这是为什么。感谢我能够用这段代码解决这个问题,这段代码丢失了密钥信息,虽然我想保留密钥,但它起到了作用。如果您稍微扩展此代码段,您可以保存“密钥信息”和“表示”。是的,谢谢array_flip()两次应该可以做到这一点,它应该给我唯一的值删除重复的1:00am,并保留关键点。这很有效。
array(10) {
[143354883]=>
string(6) "1:00am"
[144454864]=>
string(6) "1:30am"
[0]=>
int(4)
[3]=>
string(4) "Test"
[144474884]=>
string(6) "1:00am"
[143354884]=>
string(6) "1:00am"
[144654884]=>
string(6) "1:30am"
[1]=>
int(4)
[2]=>
int(4)
[4]=>
string(4) "TEST"
}
$b = array_flip(array_flip($a));
$c = array_diff_key($a, $b);
array(5) {
[144454884] = string(7) "12:00am"
[145454884] = string(7) "12:30am"
[143354884] = string(6) "1:00am"
[144654884] = string(6) "1:30am"
[1444567584] = string(7) "2:00am "
}
array(2) {
[144474884] = string(6) "1:00am"
[144454864] = string(6) "1:30am"
}