配列の最後の要素を削除したい場合は、次の 2 つのコードのいずれかを使用できます。
array_pop($array);
(戻り値は使用しません)
それらの間にパフォーマンスまたはセマンティックの違いはありますか?
そうでない場合、どちらが優先されますか?
配列の最後の要素を削除したい場合は、次の 2 つのコードのいずれかを使用できます。
array_pop($array);
(戻り値は使用しません)
それらの間にパフォーマンスまたはセマンティックの違いはありますか?
そうでない場合、どちらが優先されますか?
unset
削除された値で何かを「実行」する必要がある場合 (以前に別の場所に割り当てていない限り)、何も返さないのに対しarray_pop
、最後の項目だったものが得られるため、これは役に立ちません。
提供したunset
オプションは、配列の長さを数えて計算を実行しているため、パフォーマンスがわずかに低下する可能性がありますが、違いがあるとしても無視できると思います。
他の人が言ったように、配列が数値で連続している場合、上記は当てはまりますが、配列がこのように構造化されていない場合、物事は複雑になります
例えば:
<?php
$pop = $unset = array(
1 => "a",
3 => "b",
0 => "c"
);
array_pop($pop);
// array looks like this:
// 1 => "a", 3 => "b"
$count = count($unset) - 1;
unset($count);
// array looks like this because there is no item with index "2"
// 1 => "a", 3 => "b", 0 => "c"
array_pop($array)
の最後の要素を削除し$array
ます。
unset($array[count($array) -1]);
index の要素を削除しますcount($array) -1
。この要素は、必ずしも配列の最後の要素ではありません。
を検討してください$array = array(0 => 'foo', 2 => 'bar', 1 => 'baz')
。この場合、$array[1]
が最後の要素です。コード
foreach (array(0 => "foo", 2 => "bar", 1 => "baz") as $key => $value)
echo "$key => $value\n";
版画
0 => foo 2 => bar 1 => baz
さらに、index の要素count($array) -1
が存在しない場合もあります。一連のインデックスにギャップが存在する可能性があり、整数インデックスが文字列インデックスと混在する可能性があります。
戻り値が異なります。 array_pop
最後の要素を返しますが、unset
何も返しません。
最後の要素を単純に削除する場合は、array_pop
を実行する必要がないため、より適切でありcount($array)-1
、よりクリーンで読みやすくなります。
はいあります。
まず、このunset()
オプションは数値の連続した配列に対してのみ機能します。配列に数値ではない要素が含まれている場合、またはその数値シーケンスにギャップがある場合、unset()
呼び出しはから間違った値を取得し、count()
失敗します。
次に、配列が数値的で連続していると仮定すると、まだ違いがあります。
array_pop()
また、ポップされた要素の値を戻り値として返します。unset()
これはしません。
したがって、データを引き続き使用する必要がある場合は、 を使用してarray_pop()
ください。
値を保持する必要がない場合は、いいえ、どちらを使用してもおそらくそれほど重要ではありません。array_pop()
( を呼び出す必要がないためcount()
)より高速であると思われますが、確認していません。正直なところ、数千回の呼び出しを行っていない限り、違いは無視できます。
呼び出し構文と戻り値の明らかな違いを除いて...
array_pop
最後のものは常にポップします。
数値count - 1
ID で要素の設定を解除します。これは、すべての要素が継続的に数値でインデックス付けされている場合にのみ、期待どおりに機能します。
私は unset() を好みますが、パフォーマンスを消費する可能性のある count() を呼び出します。
別の選択肢は array_slice(array, offset, length, preserve_keys) です:
$array = array_slice($array, 0, -1, true);
他の人が述べたように、それらの機能は同じで、戻り値をarray_pop
. unset
ただし、呼び出しによる大きな配列でのメソッドのパフォーマンスの問題の可能性についても言及する価値がありcount()
ます。
unset()
Oswald が言及しているように、数字キーでのみ期待どおりに機能することも注目に値します。
はい、違いがあります
array_pop() は、削除された要素も返します。たとえば、最後の要素、および
unset() は何も返しません