找到数组中每个项目的最后位置

时间:2013-12-24 09:26:36

标签: php

我有一个这样的数组:

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中有一种简单的方法吗?提前谢谢

5 个答案:

答案 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()

  

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