5

型キャスト中にキーの重複を防ぐ最善の方法は何ですか?

例 :

//Credits @bwoebi
$obj = (object)array(1,2,3);
$obj->{1} = "Duplicate key 1";
$obj->{2} = "Duplicate key 2";
$obj->{3} = "Duplicate key 3";
$array = (array)$obj ;
print_r($array);

出力

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [1] => Duplicate key 1
    [2] => Duplicate key 2
    [3] => Duplicate key 3
)

今、私は一部の賢い人々がそれを言うことを知ってkeystringますintvar_dump

var_dump($array);

出力

array (size=6)
  0 => int 1
  1 => int 2
  2 => int 3
  '1' => string 'Duplicate key 1' (length=15)
  '2' => string 'Duplicate key 2' (length=15)
  '3' => string 'Duplicate key 3' (length=15)

しかし、主な問題は、キーを取得する方法さえないことです

echo $array['1'] ,PHP_EOL;     //Expected Duplicate key 1
echo $array[1] ,PHP_EOL;

出力

2
2

ループせずにこの問題を回避する方法はありますか? 明らかに、@PeeHaa埽が再びビールを飲まない限り、私はこの間違いを犯すことは決してありませんが、教育を受けPHPた開発者に役立つ答えがあると思います.

. array_values- これは、sortまたはキーの位置を変更する任意の php 関数で簡単に解決できます。

sort($array);
print_r($array);

出力

Array
(
    [0] => Duplicate key 1
    [1] => Duplicate key 2
    [2] => Duplicate key 3
    [3] => 1
    [4] => 2
    [5] => 3
)
4

3 に答える 3

1

array_values関数を使用して配列キーをリセットできます。

これを試して:

$obj = (object)array(1,2,3);
$obj->{1} = "Duplicate key 1";
$obj->{2} = "Duplicate key 2";
$obj->{3} = "Duplicate key 3";
$array = (array)$obj ;

$array = array_values($array);
print_r($array);

これを生成します:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => Duplicate key 1
    [4] => Duplicate key 2
    [5] => Duplicate key 3
)

または、次のようにキャストする前に array_values を使用することもできます。

$array = array_values((array)$obj);

お役に立てれば!

于 2013-04-09T11:17:58.263 に答える