0

配列として返されるxlsドキュメントからデータを抽出しています。ただし、配列キーは数値ではありませんが、セル列のアルファベットの数字に似ています。だから効果的に私はこのような配列を持っています:

  // Example array:
  $array = array(
        [0] => array(
              "A" => "Name",
              "B" => "Surname",
              "C" => "",
              "D" => "Telephone"
        ),
        [1] => array(
              "A" => "Name",
              "B" => "Surname",
              "C" => "",
              "D" => "Telephone"
        ),
        [2] => array(
              "A" => "",
              "B" => "",
              "C" => "",
              "D" => ""
        )
  );

返された配列の問題は、配列がまったくフィルタリングされないことです。行に空の値の行が含まれている可能性があります。

配列を完全にクリーンアップして空の行と数字を削除する方法が必要ですが、これにより、後で配列の一貫性に関する問題が発生する可能性があります。

私が探しているのは、配列内の行をアルファベットの数字で切り刻むことができる関数です。つまり、事実上array_chop($ array "、" C ");のようなもので、D以降の残りのすべての行のキーと値のペアを効果的に設定解除します。

これは可能ですか?すでに使用できるphp関数はありますか?サンプルコードを提供できないことをお詫び申し上げますが、どこから始めればよいかわかりません。アレイはかなり大きいので、メモリ効率の高いソリューションを探しています。

前もって感謝します!

4

1 に答える 1

0

列の最初の小さな部分だけをコピーしたい場合、これは効率的である必要があります。

<?php
$array = array(
      0 => array(
            "A" => "Name",
            "B" => "Surname",
            "C" => "",
            "D" => "Telephone"
            ),
      1 => array(
            "A" => "Name",
            "B" => "Surname",
            "C" => "",
            "D" => "Telephone"
            ),
      2 => array(
            "A" => "",
            "B" => "",
            "C" => "",
            "D" => ""
            )
      );

$last_column = 1;

$n = count($array);
for ($i = 0; $i < $n; ++$i)
{
      $copy = array();
      $j = 0;
      foreach($array[$i] as $key => $value)
      {
            if ($j <= $last_column)
            {
                  $copy[$key] = $value;
                 ++$j;
            }
            else
            {
                  $array[$i] = $copy;
                  break;
            }
      }
}

var_dump($array);

これにより、行列に名前と姓のみが残ります。

array(3) {
  [0]=>
  array(2) {
    ["A"]=>
    string(4) "Name"
    ["B"]=>
    string(7) "Surname"
  }
  [1]=>
  array(2) {
    ["A"]=>
    string(4) "Name"
    ["B"]=>
    string(7) "Surname"
  }
  [2]=>
  array(2) {
    ["A"]=>
    string(0) ""
    ["B"]=>
    string(0) ""
  }
}
于 2013-01-19T13:47:53.850 に答える