【问题标题】:Get last key-value pair in PHP array获取 PHP 数组中的最后一个键值对
【发布时间】:2010-09-27 07:38:23
【问题描述】:

我有一个结构如下的数组:

[33] => Array
    (
        [time] => 1285571561
        [user] => test0
    )

[34] => Array
    (
        [time] => 1285571659
        [user] => test1
    )

[35] => Array
    (
        [time] => 1285571682
        [user] => test2
    )

如何获取数组中的最后一个值,但保持索引 [35]?

我正在寻找的结果是这样的:

[35] => Array
    (
        [time] => 1285571682
        [user] => test2
    )

【问题讨论】:

  • 因为我有一个小喊话框,基于文件,并且只想显示一个喊叫,文件已序列化。

标签: php arrays


【解决方案1】:

示例 1:

$arr = array("a"=>"a", "5"=>"b", "c", "key"=>"d", "lastkey"=>"e");
print_r(end($arr));

输出 = e


示例 2:

数组没有

$arr = array("a", "b", "c", "d", "e");
print_r(array_slice($arr, -1, 1, true));
// output is = array( [4] => e ) 

示例 3:

阵列带有

$arr = array("a"=>"a", "5"=>"b", "c", "key"=>"d", "lastkey"=>"e");
print_r(array_slice($arr, -1, 1, true));
// output is = array ( [lastkey] => e ) 

示例 4:

如果您的数组键像:[0] [1] [2] [3] [4] ... 等等。您可以使用:

$arr = array("a","b","c","d","e");
$lastindex = count($arr)-1;
print_r($lastindex);

输出 = 4


示例 5: 但如果你不确定!

$arr = array("a"=>"a", "5"=>"b", "c", "key"=>"d", "lastkey"=>"e");
$ar_k = array_keys($arr);
$lastindex = $ar_k [ count($ar_k) - 1 ];
print_r($lastindex);

输出 = lastkey


资源:

  1. https://php.net/array_slice
  2. https://www.php.net/manual/en/function.array-keys.php
  3. https://www.php.net/manual/en/function.count.php
  4. https://www.php.net/manual/en/function.end.php

【讨论】:

    【解决方案2】:
    $last = array_slice($array, -1, 1, true);
    

    有关参数含义的详细信息,请参阅http://php.net/array_slice

    附:与其他答案不同,这个答案实际上可以满足您的要求。 :-)

    【讨论】:

    • 但这会返回其他数组而不仅仅是字符串
    • +1 这实际上做了问题所要求的 - 它保留了索引并返回一个包含单个元素的数组(这是问题中示例所暗示的)。
    【解决方案3】:

    您可以使用end 将内部指针前进到末尾或使用array_slice 获取仅包含最后一个元素的数组:

    $last = end($arr);
    $last = current(array_slice($arr, -1));
    

    【讨论】:

    【解决方案4】:

    尝试使用

    end($array);
    

    【讨论】:

    • 这是获取最后一个数组元素的 value 的最佳方法,但 OP 要求一个仅包含最后一个元素(具有正确索引)的数组。但是,+1 因为这是大多数人在谷歌上搜索此内容所需要的。
    • OP 明确要求 ... 但要保持索引 [35]?。 OP 在对 Gumbo 的回答的评论中重复了这个愿望。因此,我认为将这个答案选为接受的答案是一种误导。 @salathe 的答案最好地描述了 OP 要求的行为。
    【解决方案5】:

    如果你有一个数组

    $last_element = array_pop(array);
    

    【讨论】:

      【解决方案6】:

      另一种解决方法是:

      $value = $arr[count($arr) - 1];
      

      上面会统计数组值的个数,减1然后返回值。

      注意:这只能在您的数组键是数字时使用。

      【讨论】:

        【解决方案7】:

        就像秋葵所说,

        <?php
        
        $fruits = array('apple', 'banana', 'cranberry');
        echo end($fruits); // cranberry
        
        ?>
        

        【讨论】:

          【解决方案8】:

          由于需要密钥,因此接受的解决方案不起作用。

          这个:

          end($array);
          return array(key($array) => array_pop($array));
          

          将完全按照问题中的示例返回。

          【讨论】:

            【解决方案9】:

            "SPL-way":

            $splArray = SplFixedArray::fromArray($array);
            $last_item_with_preserved_index[$splArray->getSize()-1] = $splArray->offsetGet($splArray->getSize()-1);
            

            阅读更多关于SplFixedArray 以及为什么它在某些情况下(尤其是大索引大小的数组数据)比基本array 更可取的信息=> The SplFixedArray class

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-07-21
              • 2016-05-17
              • 1970-01-01
              • 1970-01-01
              • 2011-01-21
              • 2011-09-09
              相关资源
              最近更新 更多