После foreach вы можете заполнить ваш массив нулями:
foreach ($product->info->details as $details) {
$skuItem[] = $details->dtl1;
$skuItem[] = $details->dtl2;
$skuItem[] = $details->dtl3;
}
Массив теперь содержит:
0 => "123"
1 => "TEst"
2 => "123"
Теперь запустите:
$skuItem = array_pad($skuItem, 6, 0);
This будет добавлять нули в конец массива до тех пор, пока вы не получите в нем 6 элементов, поэтому массив теперь содержит:
0 => '123'
1 => 'TEst'
2 => '123'
3 => 0
4 => 0
5 => 0
Если вы хотите вместо строки ноль, то просто передайте это как 3-й аргумент: [1110 ]
$skuItem = array_pad($skuItem, 6, '0');
Выходы:
0 => '123'
1 => 'TEst'
2 => '123'
3 => '0'
4 => '0'
5 => '0'
SQL:: Оператор, в особенности SQL:: Оператор:: модуль Структуры, позволит Вам проанализировать и управлять SQL-операторами. Подмножество синтаксиса SQL, который это понимает, видно здесь.
В связанном примечании существует DBI:: Профиль для помощи с анализом производительности.
При использовании JDBC или чего-то как thar SQL не должен иметь никаких литералов, просто'?' маркировка, где они должны быть.
Я думаю, что использовал бы sed
решить это. Что-то вроде этого
$ cat sql.txt
SELECT * FROM USER WHERE USERID = 123 OR USERNAME LIKE 'Name1%'
SELECT * FROM USER WHERE USERID = 124 OR USERNAME LIKE 'Name2%'
SELECT * FROM USER WHERE USERID = 125 OR USERNAME LIKE 'Name3%'
SELECT * FROM USER WHERE USERID = 126 OR USERNAME LIKE 'Name4%'
$ sed -e "s/\([0-9]\+\)\|\('[^']*'\)/?/g" sql.txt
SELECT * FROM USER WHERE USERID = ? OR USERNAME LIKE ?
SELECT * FROM USER WHERE USERID = ? OR USERNAME LIKE ?
SELECT * FROM USER WHERE USERID = ? OR USERNAME LIKE ?
SELECT * FROM USER WHERE USERID = ? OR USERNAME LIKE ?
Я знаю, что Вы хотели независимую от базы данных опцию, но если Вы используете Microsoft SQL Server, свободный MS, ReadTrace (для SQL 2005) и Read80Trace (для SQL 2000) делают точно это. Они берут выходной файл трассировки и разделяют литералы. Я не видел независимого от дб решения ни один (и я работаю на программное обеспечение Quest, автора независимых от дб инструментов).
http://blogs.msdn.com/psssql/archive/2007/12/18/rml-utilities-for-microsoft-sql-server-released.aspx
Так, что Вы говорите, Вы, может иметь некоторые плохо работающие запросы, которые подобны, потому что они создаются динамично, и Вы хотите, чтобы они группировались, так как они происходят из того же вызова так, чтобы потраченное выполнение общего времени повысилось до вершины в Вашем профилировании?
Я думаю, что необходимо будет обработать это с regex или чем-то. Возможно, можно передать операторы через a SQL
prettifier, таким образом, они последовательны первый, затем санируют их - литеральные строки должны быть самыми легкими, потому что они - все в '' (/'.*'/STRING_LITERAL/)
, и затем числовые литералы могли бы быть выполнимыми путем удаления /\d*/NUMERIC_LITERAL/
или подобный.
Система поиска исходного кода Semantic Designs сделает это тривиально, используя свой SQL-сканер.
Поисковая система анализирует исходный код для создания лексем, включая именно те буквальные строки, которые вы после. Индексирует все лексемы и использует этот индекс, чтобы вы могли искать / просматривать ваш источник база кода (даже если она огромна) в интерактивном режиме.
Запрос поисковой системы: S (да, просто S) найдет все буквальные символы «S» в вашем тексте SQL. Все результаты запроса отображаются в окне обращения, и вы можете щелкните свой путь, чтобы просмотреть рассматриваемый код из любого ударить. Есть средство ведения журнала, которое будет записывать все результаты для последующего анализа.
http://www.semanticdesigns.com/Products/SearchEngine/index.html