В основном я использую эту удобную функцию для обработки строк db (закройте глаза на PDO и / или другие вещи)
function fetch($query,$func) {
$query = mysql_query($query);
while($r = mysql_fetch_assoc($query)) {
$func($r);
}
}
С помощью этой функции я могу просто:
fetch("SELECT title FROM tbl", function($r){
//> $r['title'] contains the title
});
Скажем, теперь мне нужно объединить все $r['title']
в var (это всего лишь пример).
Как я мог это сделать? Я думал примерно так, но это не очень элегантно:
$result = '';
fetch("SELECT title FROM tbl", function($r){
global $result;
$result .= $r['title'];
});
echo $result;
early binding
. Однако я предполагаю, что в приведенном выше примере, когдаuse (&$result)
передается по ссылке, это не имеет значения?use
является раннее связывание - если вы имеете в виду обходной путь для позднего связывания - вы должны передать переменнуюuse
по ссылке - используя&
=>use (&$result)
и изменить$result
переменную, прежде чем вызывать анонимную функцию (или что-то, что ее вызывает)Как насчет того, чтобы переписать "fetch" так, чтобы $ func вызывалась только один раз?
function fetch($query,$func) { $query = mysql_query($query); $retVal = array(); while($r = mysql_fetch_assoc($query)) { $retVal[] = $r; } $func($retVal); }
Таким образом, вы вызываете $ func только один раз и повторно обрабатываете массив после получения? Не уверен в производительности, даже если вызывать функцию 200 раз - это не очень хорошая идея.
источник