0

我有一个或多个数组。大约 500 个初选,每个初选 6 行。

以下是前 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
    )

我想将此代码的选择注入到 while 函数中,以在某些图像上打印元数据。

我需要查询此列表以查找变量$image,该变量将具有 [Stock book code] 中保存的值,例如。一个-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 到数组编译器,使用代码如下。来自 gist hub 上的一个项目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>';  


    ?>
4

1 回答 1

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[$image]['Work Title'] 之类的数据,假设您的附加数据数组存储在 $additionalData 中,并且您的 $image 包含项目的库存编号。您在这里实际上要做的是创建一个模型数组,其中数组的每一行都包含有关一个数据实例的所有信息。

您可以通过添加一个函数使您的数组看起来像这样

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;
}

并从您现有的代码段中调用它。

于 2013-05-08T09:34:11.777 回答