web-dev-qa-db-ja.com

PHP-配列から最後の要素の前の要素を取得する方法は?

PHP 5の配列から最後の要素の前の要素を取得するにはどうすればよいですか?

46
Manny Calavera
$array[count($array)-2]

ゼロから始まる数値インデックス配列でなければなりません。これが機能するには、少なくとも2つの要素が必要です。 (明らかに)

69
Notinlist

これはこの配列でも機能します:

$array[0] = "hello";
$array[5] = "how";
$array[9] = "are";

end($array);
echo prev($array); // will print "how"

Count()を使用する他のソリューションは、配列のインデックスが順番に並んでいると想定しています。 endとprevを使用して配列ポインターを移動すると、実際の値が取得されます。上記の配列でcount()メソッドを使用すると、失敗します。

118
Erik

array_sliceは、2番目の引数として負のオフセットを取ります。これにより、最後から2番目のアイテムを含む単一のアイテム配列が得られます。

$arr = array(1,2,3,4,5,6);
array_slice($arr, -2, 1);

単一の値だけが必要な場合は、いくつかのオプションがあります。中間変数を使用してもかまわない場合は、[0]で最初の値を取得するか、array_popまたはarray_shiftを呼び出すだけで、両方とも参照渡しの変数が必要です。そうしないと、strictモードで警告が表示されます。

または、array_sumまたはarray_productを使用することもできます。これは少しハックですが、単一アイテムの配列では正常に機能します。

16
James Wheare

私については非常に小さなソリューション

end($array);
echo prev($array);
16
DevAnimal

連想配列と数値配列の両方で機能する方法は、array_pop()を使用して配列の最後から要素をポップすることです。

$last = array_pop($array);
$second_last = array_pop($array);

// put back the last
array_Push($array, $last);
6
Yada

すべての配列には、 "内部配列ポインタ"があり、現在の配列要素を指します。PHPには、配列内を移動し、現在の要素のキーと値を表示します。

  • end() -配列の内部ポインタを最後の要素に設定します
  • reset() -配列の内部ポインタを最初の要素に設定します
  • prev() -内部配列ポインターを巻き戻す
  • next() -配列の内部配列ポインターを進める
  • current() -配列内の現在の要素を返します
  • key() -配列からキーを取得する
  • each() -配列から現​​在のキーと値のペアを返し、配列カーソルを進めます

これらの関数は、配列が空、シーケンシャル、または連想配列であるかどうかに関係なく機能します。例では配列が指定されていないため、どの配列でも機能するはずです。

_$array = array(
    'before_last' => false,
    'last' => false,
);

end($array); /* 
- set pointer to last element -> $array['last']
- return new current element value if it exists, -> false
- else return FALSE 
*/

prev($array); /* 
- set pointer one place before current pointer -> $array['before_last']
- return new current element value if it exists, -> false
- else return FALSE 
*/

if(!is_null(key($array)){ /* 
- return current element key if it exists -> "before_last"
- else return NULL
*/
    $before_last_element_value = current($array); /* 
    - return current element value if it exists, -> false
    - else return FALSE 
    */
}
_

予想される結果(false)と存在しない要素の結果は同じである(FALSE)ため、返された要素値、要素キーを使用して要素が存在するかどうかを確認することはできません違います。

キーは integer または string のいずれかです。値は、任意の type にできます。 ソース

key() は、要素が存在する場合は現在のキーの値を返し、存在しない場合はNULLを返します。有効なキーがNULLになることはないため、NULLが返された場合、要素が存在しないと判断できます。

4
TarranJones
// Indexed based array
$test = array('a','b','c','d','e');
$count = count($test);
print $test[$count-2];

// Associative Array
$months = array(
         'jan'=>'January', 
         'feb' => 'february', 
         'mar' => 'March', 
         'apr' => 'April'
    );

$keys = array_keys($months);
$count = count($keys);
print $keys[$count-2];
2
Darshana