10

配列の最後の要素を削除したい場合は、次の 2 つのコードのいずれかを使用できます。

  1. array_pop($array);(戻り値は使用しません)

  2. unset($array[count($array) -1]);

それらの間にパフォーマンスまたはセマンティックの違いはありますか?

そうでない場合、どちらが優先されますか?

4

10 に答える 10

12

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"
于 2013-07-30T12:42:07.803 に答える
10

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が存在しない場合もあります。一連のインデックスにギャップが存在する可能性があり、整数インデックスが文字列インデックスと混在する可能性があります。

于 2013-07-30T12:44:38.063 に答える
5

戻り値が異なります。 array_pop最後の要素を返しますが、unset何も返しません。

最後の要素を単純に削除する場合は、array_popを実行する必要がないため、より適切でありcount($array)-1、よりクリーンで読みやすくなります。

于 2013-07-30T12:42:23.923 に答える
2

はいあります。

まず、このunset()オプションは数値の連続した配列に対してのみ機能します。配列に数値ではない要素が含まれている場合、またはその数値シーケンスにギャップがある場合、unset()呼び出しはから間違った値を取得し、count()失敗します。

次に、配列が数値的で連続していると仮定すると、まだ違いがあります。

array_pop()また、ポップされた要素の値を戻り値として返します。unset()これはしません。

したがって、データを引き続き使用する必要がある場合は、 を使用してarray_pop()ください。

値を保持する必要がない場合は、いいえ、どちらを使用してもおそらくそれほど重要ではありません。array_pop()( を呼び出す必要がないためcount())より高速であると思われますが、確認していません。正直なところ、数千回の呼び出しを行っていない限り、違いは無視できます。

于 2013-07-30T12:43:18.620 に答える
1

呼び出し構文と戻り値の明らかな違いを除いて...

array_pop最後のものは常にポップします。
数値count - 1ID で要素の設定を解除します。これは、すべての要素が継続的に数値でインデックス付けされている場合にのみ、期待どおりに機能します。

于 2013-07-30T12:46:11.913 に答える
0

私は unset() を好みますが、パフォーマンスを消費する可能性のある count() を呼び出します。

別の選択肢は array_slice(array, offset, length, preserve_keys) です:

$array = array_slice($array, 0, -1, true);
于 2013-07-30T12:47:54.160 に答える
0

他の人が述べたように、それらの機能は同じで、戻り値をarray_pop. unsetただし、呼び出しによる大きな配列でのメソッドのパフォーマンスの問題の可能性についても言及する価値がありcount()ます。

unset()Oswald が言及しているように、数字キーでのみ期待どおりに機能することも注目に値します。

于 2013-07-30T12:44:22.000 に答える
0

はい、違いがあります

array_pop() は、削除された要素も返します。たとえば、最後の要素、および

unset() は何も返しません

于 2013-07-30T12:44:52.233 に答える