0

PHPコードを介してExcelシートから読んでいます。一部のフィールドはオプションです。ライブラリを使用すると、次のような結果が得られます

Array
    (
    [1] => Test123
    [2] => None
    [3] => Booster
    [6] => Yes
    [7] => Yes
    [8] => 1
    [9] => Unknown
    [10] => 21
    [11] => http://unknowm.com
    )

値が Excel ファイルの列に存在しなかったため、インデックス 4 と 5 が欠落していることがわかります。ここで、この配列を名前付きインデックスを持つ別の配列とマージする必要があります。2 番目の配列の長さは 11 です。しかし、両方をマージすると、未定義のインデックス 4 と 5 を示す php エラーが生成されます。私は動的に作業を行っており、2 番目の配列のすべてのインデックスを使用せざるを得ません。2番目の配列にマージする前に、空の文字列で埋められていない最初の(Excelからの)配列インデックスをwntします。これどうやってするの?多くの情報を提供できたことを願っています。

4

3 に答える 3

4

を使用array_fillして、結果に必要なすべてのキーを含む配列を作成し、配列加算演算子を使用して、元の配列にないキーを追加できます。

$firstIndexToEnsure = 1;
$lastIndexToEnsure = 11;
$defaults = array_fill($firstIndexToEnsure,
                       $lastIndexToEnsure - $firstIndexToEnsure + 1,
                       '');
$array += $defaults;

実際に見てください

結果をさらにキーで並べ替える必要がある場合は、それに対しても使用ksortします。

この手法は、一部のデフォルトを部分的にのみオーバーライドする可能性のあるユーザー入力を受け入れる場合はどこでも、非整数キーに対しても非常にうまく機能することに言及する価値があります。

$params = array('color' => 'blue', 'size' => 'large');
$defaults = array(
    'color' => 'red',
    'size'  => 'large',
    'shape' => 'square',
    'age'   => 'old',
);

$params += $defaults;
于 2012-09-15T11:28:27.613 に答える
2

最初の配列を完成させます。

$lastindex = 11;
for($i=1; $i<=$lastindex; $i++)
  if( !isset($array[$i] ))
    $array[$i] = '';

これで、2 番目の配列と簡単にマージできます。

于 2012-09-15T11:32:04.487 に答える
2

この方法を試してください:

$array = array(
    0 => "a",
    2 => "b",
    4 => "b",
    5 => "b",
    6 => "b",
);

// If min and max are static, use numbers instead of getting them from the array
$keys = array_keys($array);
$all = array_fill(min($keys), max($keys) - min($keys) + 1, "");
$filled = $array + $all;

var_dump($filled);
于 2012-09-15T11:31:38.643 に答える