1

以下のように出力しました

[0]
{
    [0]=>'a'
    [2]=>'b'
    [5]=>'c'
    [6]=>'d'
}

いいえ私が望むのは、作成されていない配列インデックスを挿入し、それらの値を「0」に設定することです。

例:この場合、上記の代わりに以下のような出力が必要です。誰でも私にコードのサンプルを見せてもらえますか.............私は array_fill() を使用しようとしましたが、最後に配列インデックスを挿入するだけで機能しませんでした。

array_fill($b1, 1, "0");

望ましい出力:

[0]
    {
        [0]=>'a'
        [1]=>'0'
        [2]=>'b'
        [3]=>'0'
        [4]=>'0'
        [5]=>'c'
        [6]=>'d'
    }
4

4 に答える 4

1

キーを見ながら、アレイを循環します。最後の反復が現在のキーから1を超える場合は常に、短いwhileループを実行して、配列の内容をキャッチアップします。

$newArray = array();
$lastKey = 0;

foreach ( $array as $key => $value ) {
  while ( $lastKey++ < $key ) $newArray[] = 0;
  $newArray[$key] = $value;
}

出力は次のとおりです。

Array
(
    [0] => a
    [1] => 0
    [2] => b
    [3] => 0
    [4] => 0
    [5] => c
    [6] => d
)

デモ:http ://codepad.org/9EnowzqL

于 2012-05-01T08:30:06.283 に答える
1
function fill_missing_keys($array)
{
    $arr_keys = array_keys ($array);
    $all_keys = range(0, max($arr_keys));  
    $missing_keys = array_diff($all_keys, $arr_keys);
    $zero_array = array_fill_keys ($missing_keys, '0');
    $filled_array = $array + $zero_array; 
    ksort($filled_array);
    return $filled_array;
}

実行例はこちらにあります: http://ideone.com/jDU99

于 2012-05-01T08:33:46.393 に答える
0

実際、最初に頭に浮かぶのは、新しい要素を挿入した後、配列をキー(ksortドキュメント)で並べ替えることです。

ksort($array);

それはおそらくあなたの問題をすでに解決しています。他のすべてはもう少し作業が必要です。

編集:すべてを未設定に設定する必要がある場合は、それも非常に簡単です:

$array = array(/* of set elements */);
$array += array_fill($start, $end, "0"); # fill only unset, array union operator
ksort($array);
于 2012-05-01T08:21:36.913 に答える
0

私は(テストされていない)これがうまくいくと信じています:

  // get the first used key
  list($firstkey, $firstval)=each(asort($input_array));
  $input_array[$firstkey]=$firstval;

  // get the last used key
  list($lastkey, $lastval)=each(arsort($input_array));
  $input_array[$lastkey]=$lastval;

  $output_array=array_replace(array_fill($firstkey, $lastkey, 0), $input_array);
于 2012-05-01T08:24:15.253 に答える