2013-05-08 18 views
0

我有一个数组或数组。大约500条初选,每条线路6条线路。使用PHPLinq - 柯比db模拟

这里是第一实施例2:

Array 
(
[0] => Array 
    (
     [Stock book code] => a-04 
     [Date] => 1962 
     [Work Title] => River Barge 
     [height] => 0 
     [width] => 0 
     [materials] => Oil on Board 
     [Ownership] => Sold 
    ) 

[1] => Array 
    (
     [Stock book code] => a-08 
     [Date] => 1962 
     [Work Title] => Thames Bridge Fantasy 
     [height] => 48 
     [width] => 36 
     [materials] => Oil on Board 
     [Ownership] => Available 
    ) 

欲注入的选择这个码的成而功能上打印一些图像的元数据。

我需要查询此列表以查找变量$image,该变量的值将保留在[Stock book code]中。 A-04。有人建议最好的方法是Linq图书馆。例如https://code.google.com/p/phinq

该数组当前通过片段调用,例如, <?php snippet('csvtoarrayvibhu')?>,这样可以预先加载全局或放入if语句中。对哪些意见会更好,值得欢迎。

<ul class="gallery"> 
    <?php $imagelist= $page->imagelist(); 
    if ($imagelist != ''){ 
$imagelistitem= explode(", ", $imagelist); 
foreach ($imagelistitem as $image): ?> 
    <li><img src="<?php echo url('assets/artistswork/450/').$image.'.jpg' ?>" /> 

这里

<span class="workTitle">Title</span><span class="workDate">Date</span><span class="workMaterial">Material</span><span class="workDimensions">Dimensions</span><span class="workPrice">Price</span></li> 
<?php endforeach ;} ?> 
</ul> 

目前与我的csv合作阵列编译器使用的代码如下所示的查询。从一个项目的主要枢纽https://gist.github.com/jaywilliams/385876和乔下面的第一个答案。它奇妙地工作。

不知道是否最好在一个或两个函数中做到这一点,所以我引用了下面的地段。

<?PHP 

    function csv_to_array($filename='', $delimiter=',') { 
     if (!file_exists($filename)) 
      return 'not exist'; 
      if (!is_readable($filename)) 
      return 'not readable'; 

     $header = NULL; 
     $data = array(); 
     if (($handle = fopen($filename, 'r')) !== FALSE) { 
      while (($row = fgetcsv($handle, 200, $delimiter)) !== FALSE) { 
       if (!$header) 
        $header = $row; 
       else 
        $data[] = array_combine($header, $row); 
      } 
      fclose($handle); 
     } 

     return $data; 


    } 

function createModels($data) 
{ 
    $newRow = array(); 
    if (is_array($data)){ 
     foreach($data as $rowIndex => $row){ 
      if(is_array($row)){ 
       $newRowIndex = $row['Stock book code']; 
      } 
      $newData[$newRowIndex] = array_merge($newRow, $row); 
     } 
    } 
    return $newData; 
} 

    echo '<pre>'; 
    $imageinfoarray = csv_to_array('peterliddle/assets/artistswork/imagemeta.csv'); 
    print_r(createModels($imageinfoarray)); 
    echo '</pre>'; 


    ?> 

回答

0

如果你可以重新设计你的数组,让它看起来更像是这样会更好;

Array 
(
    [a-04] => Array 
    (
     [Stock book code] => a-04 
     [Date] => 1962 
     [Work Title] => River Barge 
     [height] => 0 
     [width] => 0 
     [materials] => Oil on Board 
     [Ownership] => Sold 
    ) 

[a-08] => Array 
    (
     [Stock book code] => a-08 
     [Date] => 1962 
     [Work Title] => Thames Bridge Fantasy 
     [height] => 48 
     [width] => 36 
     [materials] => Oil on Board 
     [Ownership] => Available 
    ) 
) 

然后,你可以只调用类似$ additionalData数据[$图片] [“工作标题”],假设你的其他数据数组存储在$ additionalData和你的$图像包含的股票数量的项目。你在本质上做的是创建一个模型数组,其中数组的每一行都包含有关数据实例的所有信息。

,你可以让你的阵列看起来像这样通过增加一个功能,所以

function createModels($data) 
{ 
    $newRow = array(); 
    if (is_array($data)){ 
     foreach($data as $rowIndex => $row){ 
      if(is_array($row)){ 
       $newRowIndex = $row['Stock book code']; 
      } 
      $newData[$newRowIndex] = array_merge($newRow, $row); 
     } 
    } 
    return $newData; 
} 

,并从现有的片段调用它。

+0

不错的解决方案。更干净。 – 2013-05-08 10:05:23

+0

Craig,我已经编辑了我发布的代码中的一个错误。新代码应该可以正常工作。 – 2013-05-08 10:21:29

+0

认为我遇到了变量$ newRow的问题,是否应该将其替换为已定义的变量? – 2013-05-08 10:25:58