2012-04-18 52 views
0

想知道是否有任何改进可以加快这个数组?如何改进这个php数组的数据检索?

测试数组的行数是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; 
     } 
    } 

} 
+0

你有有重复$的机会数据[“products_id”] – Pete 2012-04-18 06:19:27

+0

你有没有想过使用一个数据库呢? – bardiir 2012-04-18 06:21:05

+0

我正在从数据库中读取数据,并且想在输出为excel之前正确格式化数据。直接查询数据库可能会更慢(资源密集) – 2012-04-18 06:23:07

回答

0
  1. 可以构建数组$测试[]作为字典(用户products_id。 “_”。products_extra_fields_name作为密钥)

    $测试[$数据[ '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

+0

当我检索数据时,$ search = $ products_id。“_”。$ colname; $ test [$ search] ['products_extra_fields_value'],php警告我注意:未定义索引: – 2012-04-18 06:53:30

+0

尝试,只有$ test [$ search],如果仍然有未定义的索引,那么所有的值可能没有加载,否则使用var_dump来分析数据并检查子数组是否具有正确的结构 – Pete 2012-04-18 07:02:25

+0

仍未定义,我检查了var dump,看起来没问题。 array(4){[“products_id”] => string(4)“1343”[“products_extra_fields_id”] => string(1)“1”[“products_extra_fields_name”] => string(7)“Product”[“products_extra_fields_value “] => string(52)”萤石链“} 提示:未定义的索引:1343_作者 – 2012-04-18 07:24:54