2013-05-08 2 views
0

У меня есть массив или массивы. Около 500 праймериз по 6 строк.Использование PHPLinq - Kirby db mimicking

Вот первые 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, которая будет иметь значения, хранящиеся в [Код книги], например. а-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>'; 


    ?> 

ответ

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 [$ изображения] [ «Работа Title»], предполагая, что ваш дополнительный массив данных хранится в $ 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

Хорошее решение. Гораздо чище. –

+0

Крейг, я отредактировал ошибку в коде, который я разместил. Новый код должен работать нормально. –

+0

Думаю, что у меня проблема с переменной $ newRow, следует ли подставлять ее для уже определенной переменной? –

Смежные вопросы