6

配列があります (sizeofarray = 5)

$city[0] = 'Newyork'
$city[1] = 'Paris'
$city[2] = 'Paris'
$city[3] = 'Newyork'
$city[4] = 'Amsterdam'
(sizeofarray = 5)

array_unique() を使用して重複を削除したところ、次のようになりました。

$city[0] = 'Newyork'
$city[1] = 'Paris'
$city[4] = 'Amsterdam'
(sizeofarray = 3)

しかし今、私はこれが欲しい:

$city[0] = 'Newyork'
$city[1] = 'Paris'
$city[2] = 'Amsterdam'
(sizeofarray = 3)

これを達成するための機能はありますか?

4

3 に答える 3

10

array_filter配列を実行した後に使用しarray_uniqueます。

$city = array_filter($city);

ドキュメントから:

コールバックが指定されていない場合、等しい入力FALSE(ブール値への変換を参照) のすべてのエントリが削除されます。

エラーが発生する可能性がありますが、配列要素の 1 つが と等しい"0"場合、ブール値に変換するとその値は になりfalseます。その場合、カスタム コールバック関数を使用する必要があります。


あなたの質問では、配列のインデックス付けだけが順不同であり、配列に実際の空の文字列要素がないように見えます。配列を実行してから、インデックスをリセットしてみてarray_valuesくださいarray_unique

$city = array_unique($city); 
$city = array_values($city); 
于 2012-10-25T12:13:50.797 に答える
2

Tim Cooper の返信に加えてarray_values()、配列のインデックスを再作成するために使用します。

$city = array_unique($city);
$city = array_filter($city);
$city = array_values($city);

また、同じ都市が同じ名前であることを確認して'New York' != 'Newyork'ください。それ以外の場合は、追加のフィルタリングが必要になります。

于 2012-10-25T12:22:03.367 に答える
0

このようにしてみてください:

$city=array_values(array_unique($city));
于 2012-10-25T12:19:52.357 に答える