У меня есть массив или массивы. Около 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>';
?>
Хорошее решение. Гораздо чище. –
Крейг, я отредактировал ошибку в коде, который я разместил. Новый код должен работать нормально. –
Думаю, что у меня проблема с переменной $ newRow, следует ли подставлять ее для уже определенной переменной? –