我有一个这样的数组:
Array (
[0] => 2
[1] => 1
[2] => 3
[3] => 5
[4] => 1
[5] => 2
[6] => 1
[7] => 4
[8] => 2
...)
我想要做的是在php中查找此数组中每个项目的最后一次出现 所以这个例子会输出:
Element|Position
2 | 8
1 | 6
3 | 2
5 | 3
4 | 7
在php中有一种简单的方法吗?提前谢谢
答案 0 :(得分:3)
$result = array();
foreach($array as $pos => $val)
{
$result[$val] = $pos;
}
使用$arr[$x] = $v
允许我们覆盖现有密钥的新值
或者只是添加一个新密钥。
现在你可以打印数组了: (请注意,在“results”数组中,键是元素(数字),值是位置)
echo "Elements | Position (Last Occurrence)";
foreach($result as $val => $pos)
{
echo $val." | ".$pos. "<br />";
}
答案 1 :(得分:2)
array_flip()以翻转顺序返回一个数组,即数组中的键变为值,数组中的值变为键。
请注意,数组的值必须是有效键,即它们必须是整数或字符串。如果值的类型错误,将发出警告,并且相关的键/值对将不包含在结果中。
如果值有多次出现,则最新的密钥将用作其值,而其他所有密钥都将丢失。
$positions = array_flip($data);
var_dump($positions);
答案 2 :(得分:1)
您也可以尝试这样做, a one-liner solution.
<?php
$arr = array(2,1,3,5,1,2,1,4,2);// Your array
$arr2=array_flip(array_unique(array_reverse($arr,true))); // Yeah , a one-liner :)
//Displaying purposes....
foreach($arr2 as $k=>$v)
{
echo "$k is in $v position<br>";
}
输出:
2 is in 8 position
4 is in 7 position
1 is in 6 position
5 is in 3 position
3 is in 2 position
答案 3 :(得分:0)
以下代码将为您提供所需的关联数组。
$array = array(2, 5, 4, 6 , 2, 6); //Set of numbers
$occurences = array();
foreach($array as $i => $value){
if (isset($occurences[$value])){
$occurences[$value]['position'] = $i ;
} else {
$occurences[$value] = array(
"position" => $i,
"element" => $value
);
}
}
var_dump($occurences);
答案 4 :(得分:0)
<?php
$array = array("1", "2", "1", "3", "2", "1", "1", "1" , "4");
echo "<pre>";
print_r($array);
?>
Array
(
[0] => 1
[1] => 2
[2] => 1
[3] => 3
[4] => 2
[5] => 1
[6] => 1
[7] => 1
[8] => 4
)
$x = array_count_values($array);
ksort($x);
foreach ($x as $key => $value){
echo $key .'|'. $value ."<br>";
}
输出
2|2
3|1
4|1