3

少し前にいくつかの大きな PHP 関数を作成しました。これらには、いくつかの連想配列が含まれています。これまで、これらの配列には string 型と int 型 ("brown" と 118 など) のキーが含まれていたため、問題はありませんでした。問題は、キーがすべて int の場合、保持されず、代わりに 0、1 などに変換されることです。

それらがすべて int であっても、配列に与えたキーを保持するように強制する方法はありますか? 関数はかなり大きく、変更するには時間がかかりすぎます。

編集

Mike B が直観したように、配列のインデックスを再作成するように見える並べ替え関数を使用します。ここで見つけた関数を使用していました:別の配列に基づいてキーで配列をソートしますか?

それはエリンの最初のものでしたが、正しいインデックスを保持していませんでした。Boombastic によって編集されたバージョンを試してみましたが、うまく機能します。

ご回答ありがとうございます。

4

2 に答える 2

3

$array = ['00'=>'x','11'=>'y']整数キーに変換され、「0」の数字が失われるという同様の問題があります。

5年後に答えを提供するためだけに書いています...

KennyDs の回答は、次のように簡略化できます。

$array = array_map('strval',$array);

...しかし、MikeB がコメントしたように、KennyD の答えは間違っています。正しいのは次のとおりです。

foreach($array as $key => $val)
  $array[(string) $key] = $val;

または(醜い)機能的なスタイルで、

 $array = array_flip( array_map('strval', array_flip($array)) );

(私がチェックしたように直接的な方法はありません)。


var_dump()orによるチェックについてvar_export(): 数値として解析する場合 (例: '123'as 123) に文字列を数値として表示しますが、文字列が失われることはありません (!)、例array ( '00' => 'x', 11 => 'y',).

于 2016-08-21T02:56:07.033 に答える
0

配列を調べて、すべての int を文字列にキャストすることもできますか?

foreach($array as $key => $val){
  $array[$key] = (string)$val;
}

編集: キーを int にする必要がある場合は、配列を埋めるときに $key の前に (int) キャストを追加するようにしてください。

于 2011-09-27T12:41:43.927 に答える