0

私は動作するスクリプトを持っていますが、配列を管理する私の方法はより良いものになると確信しています。解決策を探しましたが見つかりませんでしたが、連想配列の機能を使用してより効率的に作業を行う必要があると確信しています。

CSV ファイルからの配列と DB からの配列の 2 つの配列があります。CSV 配列を数値として作成し、DB 配列を連想として作成しました (ただし、PHP では違いがぼやけていることは認識しています)。

1 つのフィールドの値が CSV 配列の値と一致する DB 配列のレコードを見つけようとしています。どちらの配列も多次元です。

各配列の各レコード内には、参照番号があります。CSV 配列に 1 回出現し、DB 配列に出現する可能性があります。もしそうなら、私は行動を起こす必要があります。

私は現在これを行っています(簡略化):

$CSVarray:
('reference01', 'blue', 'small' ),
('reference02', 'red', 'large' ),
('reference03', 'pink', 'medium' )

$Dbarray:
(0 => array(ref=>'reference01',name=>"tom",type=>"mouse"),
(1 => array(ref=>'reference02',name=>"jerry",type=>"cat"),
(2 => array(ref=>'reference03',name=>"butch",type=>"dog"),



foreach ($CSVarray as $CSVrecord) {
    foreach ($Dbarray as $DBrecord) {
        if ($CSVarray[$numerickey] == $DBrecord['key'] {
            do something with the various values in the $DBrecord 
        }
    }
}

配列はそれぞれ数千行であるため、これは恐ろしいことです。

一致する値が存在するかどうかを知りたいだけでなく、一致するレコードからデータを取得したいので、「array_search」などの関数は私が望むことを実行せず、array_walk は私の現在のアプローチよりも優れているようには見えません。

私が本当に必要としているのは、次のようなものです(意味不明なコード):

foreach ($CSVarray as $CSVrecord) {
    WHERE $Dbarray['key']['key'] == $CSVrecord[$numerickey] {
        do something with the other values in $Dbarray['key']
    }
}

配列を歩くのではなく、キー (数値または連想) を使用して値を一致させる方法を探しています。誰でも助けてもらえますか?

4

3 に答える 3

0

次のような foreach ループも使用できます。

foreach ($record as $key => $value) {
  switch($key)
  {
    case 'asd':
      // do something
      break;
    default:
      // Default
      break;
  }
}

スイッチもあなたが探しているものかもしれません:)

于 2012-07-26T15:34:09.743 に答える