0

このアレイを高速化するために何か改善できるかどうか疑問に思っていますか?

テスト配列の行数は 40,000 レコードです。

ループが完了するまでに非常に長い時間がかかりました。

サンプル値:

$test[] = array(
    'products_id' => $data['products_id'],
    'products_extra_fields_id' => $data['products_extra_fields_id'],
    'products_extra_fields_name' => $data['products_extra_fields_name'],
    'products_extra_fields_value' => $data['products_extra_fields_value']
    );



foreach productid
{

  $colname="column name";


    //this inside for loop making thing very slow
    foreach ($test as $key1 => $row1)
    {
        $w= $row1['products_id'];
        $x= $row1['products_extra_fields_id'];
        $y= $row1['products_extra_fields_name'];
        $z= $row1['products_extra_fields_value'];

        if( ($w==$products_id) && ($y== $colname) )
        {
            $wantedvalue=$z;
            break;
        }
    }

}
4

2 に答える 2

0

それは編集する必要がある配列ではないと思います。これらのデータをデータベースから取得する場合は、SQL クエリを高速化する必要があります。さらに、フィールドにインデックスを追加できます。これは参照できるリンクです。 http://www.catswhocode.com/blog/10-sql-tips-to-speed-up-your-database

于 2012-04-18T06:22:33.380 に答える
0
  1. 配列 $test[] を辞書として構築できます (ユーザー products_id . "_" . products_extra_fields_name をキーとして)

    $test[$data['products_id'] ."_".$data['products_extra_fields_name']] = array( 'products_id' => $data['products_id'], 'products_extra_fields_id' => $data['products_extra_fields_id' ], 'products_extra_fields_name' => $data['products_extra_fields_name'], 'products_extra_fields_value' => $data['products_extra_fields_value'] );

これを行うと、列名とproducts_idが既にあるため、配列に直接インデックスを付けることができます

于 2012-04-18T06:23:33.763 に答える