sort - php array>




獲取數組的第一個元素 (20)

PHP 5.4+:

array_values($array)[0];

我有一個數組:

array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )

我想獲得這個數組的第一個元素。 預期結果: string apple

一個要求: 通過引用傳遞不能完成 ,所以array_shift不是一個好的解決方案。

我怎樣才能做到這一點?


Sarfraz發布的一個小改變是:

$array = array(1, 2, 3, 4, 5);
$output = array_slice($array, 0, 1);
print_r ($output);

大部分工作! 但對於快速單線(低資源)呼叫:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $array[key($array)];

// key($array) -> will return the first key (which is 4 in this example)

一種便捷的方式是:

$foo = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

function get_first ($foo) {
    foreach ($foo as $k=>$v){
        return $v;
    }
}

print get_first($foo);

使用array_keys()以數字索引數組的形式訪問關聯數組的鍵,然後再次可以將其用作數組的鍵。

解決方案為arr[0]

(請注意,由於具有鍵的數組是基於0的索引,因此第1個元素為索引0)

你可以使用一個變量,然後減去一個,得到你的邏輯,即1 => 'apple'

$i = 1;
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $arr[array_keys($arr)[$i-1]];

輸出:

apple

那麼,為了簡單起見,只需使用:

$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $arr[array_keys($arr)[0]];

輸出:

apple

通過第一種方法不只是第一個元素,但可以像索引數組一樣處理關聯數組。


使用:

$first = array_slice($array, 0, 1);  
$val= $first[0];

默認情況下, array_slice不保留鍵,所以我們可以安全地使用零作為索引。


保持簡單! 這裡有很多正確的答案,但要盡量減少所有的困惑。 這兩個工作並減少了很多開銷。

key($array) =獲取key($array)的第一個鍵
current($array) =獲取current($array)的第一個值


假設:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

只需使用:

$array[key($array)]

獲得第一個元素或

key($array)

獲得第一把鑰匙。

或者,如果你想刪除它,你可以取消第一個鏈接。


原始答案,但昂貴(O(n)):

array_shift(array_values($array));

在O(1)中:

array_pop(array_reverse($array));

用其他用例的評論建議編輯

如果修改(重置數組指針的意義) $array不是問題,那麼可以使用:

reset($array);

如果需要數組“複製”,這應該在理論上更高效:

array_shift(array_slice($array, 0, 1)); 

使用PHP 5.4+(但如果為空,可能會導致索引錯誤):

array_values($array)[0];

另外值得注意的是你在做這件事的背景下,作為一個詳盡的檢查可能是昂貴的,並不總是必要的。

例如,這種解決方案適用於我正在使用它的情況(但在所有情況下顯然不能依賴於...)

 /**
 * A quick and dirty way to determine whether the passed in array is associative or not, assuming that either:<br/>
 * <br/>
 * 1) All the keys are strings - i.e. associative<br/>
 * or<br/>
 * 2) All the keys are numeric - i.e. not associative<br/>
 * 
 * @param array $objects
 * @return boolean
 */
private function isAssociativeArray(array $objects)
{
    // This isn't true in the general case, but it's a close enough (and quick) approximation for the context in
    // which we're using it.

    reset($objects);
    return count($objects) > 0 && is_string(key($objects));
}

我不喜歡擺弄數組的內部指針,但用array_keys()array_values()構建第二個數組也是低效的,所以我通常定義這個:

function array_first(array $f) {
    foreach ($f as $v) {
        return $v;
    }
    throw new Exception('array was empty');
}

我喜歡“list”示例,但“list”僅適用於作業的左側。 如果我們不想分配一個變量,我們將被迫創建一個臨時名稱,這最多會污染我們的範圍,最糟糕的情況是會覆蓋現有值:

list($x) = some_array();
var_dump($x);

上面的內容會覆蓋$ x的任何現有值,只要這個範圍是活動的(這個函數/方法的結束,或者如果我們處於頂層),$ x變量就會一直存在。 這可以通過使用call_user_func和一個匿名函數來解決,但它很笨拙:

var_dump(call_user_func(function($arr) { list($x) = $arr; return $x; },
                        some_array()));

如果我們使用這樣的匿名函數,即使它們使用傳遞引用,我們實際上也可以避免使用reset和array_shift。 這是因為調用一個函數會綁定它的參數,並且這些參數可以通過引用傳遞:

var_dump(call_user_func(function($arr) { return reset($arr); },
                        array_values(some_array())));

但是,這實際上是過度的,因為call_user_func將在內部執行這個臨時分配。 這使我們可以將傳遞引用函數看作是按值傳遞,而沒有任何警告或錯誤:

var_dump(call_user_func('reset', array_values(some_array())));

我認為在這裡使用array_values是最好的選擇。 您可以從該函數的結果中返回索引為零的值以獲取“apple”。


某些數組不能用於listresetcurrent 。 也許他們是“人造”數組 - 部分實現ArrayIterator,例如。

如果你想拉第一個值而不考慮數組,你可以將迭代器短路:

foreach($array_with_unknown_keys as $value) break;

您的值將以$value形式提供,並且循環在第一次迭代之後將中斷。 這比將一個潛在的大數組複製到像array_unshift(array_values($ arr))這樣的函數更有效。

您也可以通過這種方式獲取密鑰:

foreach($array_with_unknown_keys as $key=>$value) break;

如果你從一個函數調用這個函數,只需返回提前:

function grab_first($arr) {
    foreach($arr as $value) return $value;
}

獲取第一個元素:

array_values($arr)[0]

獲取最後的元素

array_reverse($arr)[0]

簡單地做:

array_shift(array_slice($array,0,1));

這是比較晚的遊戲,但是我遇到了一個問題,我的數組中包含數組元素作為其內部的子元素,因此我不能只獲得第一個數組元素的字符串表示形式。 通過使用PHP的current()函數 ,我管理了這一點:

<?php
    $original = array(4 => array('one', 'two'), 7 => array('three', 'four'));
    reset($original);  // to reset the internal array pointer...
    $first_element = current($original);  // get the current element...
?>

感謝所有目前的解決方案幫助我得到這個答案,我希望這可以幫助別人!


$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
foreach($arr as $first) break;
echo $first;

輸出:

apple

$array=array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

$firstValue = each($array)[1];

這比array_values()更有效,因為each()函數不會復制整個數組。

欲了解更多信息,請參閱http://www.php.net/manual/en/function.each.php


$first_value = reset($array); // First Element's Value
$first_key = key($array); // First Element's Key

希望這可以幫助。 :)







arrays