2014-12-27 2 views
1

Я немного разочаровываюсь в результатах массива. В идеале я создаю модуль создания формы в своем приложении, и я работаю с двумя разными массивами, чтобы установить столбцы базы данных и столбцы excel. По сути, я использую результаты, предоставляемые массивами, для прямой записи в файл php (файл чтения Excel). Чтобы установить разницу в книгах Excel, я размещаю идентификатор «page2», «page3» и т. Д. В массиве «excel_rows».Объединение двух отдельных массивов с различным количеством элементов

//my arrays 
$table_columns = array('field1','field2','field3','field4','field5'); //fields 
$excel_rows = array('c1','c2','page2','c3','c4','page3','c5'); //excel columns 

здесь .. Я иду, чтобы попытаться отфильтровать ключи массива ..

foreach(array_keys($excel_rows) as $key){ 
$page = array_search(strpos(trim($excel_rows[$key]),'page'),$excel_rows); 
if(strpos(trim($excel_rows[$key]),'page') !== false){ 
$excel_row .= '$objTpl->setActiveSheetIndex('.(str_replace('page','',trim($excel_rows[$key])) -1).');<br/>'.PHP_EOL; 
$table_columns[$key] = 0; 
} 
else { 
$excel_row .= '$objTpl->getActiveSheet()->setCellValue(\''.trim($excel_rows[$key]).'\',$row[\''.trim($table_columns[$key]).'\']);<br/>'.PHP_EOL; 
} 
} 

print $excel_row; 

Результат должен эхо из следующих действий:

$objTpl->getActiveSheet()->setCellValue('c1', $row['field1']); 
$objTpl->getActiveSheet()->setCellValue('c2', $row['field2']); 
$objTpl->setActiveSheetIndex(1);<br/> 
$objTpl->getActiveSheet()->setCellValue('c3', $row['field4']); 
$objTpl->getActiveSheet()->setCellValue('c4', $row['field5']); 
$objTpl->setActiveSheetIndex(2); 
$objTpl->getActiveSheet()->setCellValue('c5', $row['']); 

Как можно см., мне не хватает «field3» из моего результата, а «cs» производит и пустую строку, а не «field5».

Я принимаю что-то вроде array_compare или array_combine - это решение - я просто не могу собрать его.

Все работает прекрасно с модулем, прощающим приведенный выше массив. Любая помощь с этим была бы искренне оценена!

-Regards.

+0

проблема в поле3 находится на том же ключе, что и на странице2, и поэтому следующим полем является поле4, а не поле3, так как вы используете тот же ключ. Решение будет вставлять пустую строку на тот же ключ, что и команды страницы. –

+0

Да, эта часть была дана. Попытка определить, есть ли все равно, чтобы избежать необходимости предоставлять пустую строку для «table_columns» при настройке/вставке. – pm284

+0

Не лучше ли было бы создать многомерный массив? 'array (" page1 "=> array (" c1, c2 ")," page2 "=> array (" c3 "," c4 ")," page3 "=> array (" c5 "));' –

ответ

1

Как я могу сказать, вам нужно установить целое число +1 при создании новой страницы, а затем вычесть это целое из ключа, чтобы вы могли получить правильное поле.

$subkey = 0; 
foreach(array_keys($excel_rows) as $key){ 
    $fieldkey = $key - $subkey; 
    $page = array_search(strpos(trim($excel_rows[$key]),'page'),$excel_rows); 
    if(strpos(trim($excel_rows[$key]),'page') !== false){ 
     $excel_row .= '$objTpl->setActiveSheetIndex('.(str_replace('page','',trim($excel_rows[$key])) -1).');<br/>'.PHP_EOL; 
     //$table_columns[$key] = 0; I'm not sure what this is supposed to do 
     $subkey++; 
    } 
    else { 
     $excel_row .= '$objTpl->getActiveSheet()->setCellValue(\''.trim($excel_rows[$key]).'\',$row[\''.trim($table_columns[$fieldkey]).'\']);<br/>'.PHP_EOL; 
    } 
} 

print $excel_row; 
+0

Извините за задержанный ответ. Это правильный ответ. Спасибо! – pm284

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