передача массива в sprintf

whirlwind

TDD infected, paranoid
передача массива в sprintf

В PHP отсутствую типизирующие префиксы. Как в sprintf передать в качестве значений для замены содержимое массива?

Спасибо

PS. только не eval-ом
 

Demiurg

Guest
чего ? какой замены ? зачем тебе вообще sprintf ?
 

whirlwind

TDD infected, paranoid
ГЫ. Это что, ответ?

PHP:
    function SelectWQ(){
		$errh = 'DBAL::SelectWQ';
		$this->mlog($errh,ML_DEBUG_CALL);

		if (!$this->IsConnected()){
			$this->mlog("$errh: No connection");
			return false;
		}
		$argv = func_get_args();
		if (count($argv) < 1){
			$this->mlog("$errh: Arguments requered");
			return false;
		}

		$this->DropStatement();

        $format = array_shift($argv);
        $qtext = sprintf($format,?????????????????);
        $this->mlog("$errh: $qtext",ML_DEBUG_VARS);
        if (!($this->_DBAL_STH = mysql_query($qtext))){
        	$this->mlog("$errh: Query failed: ".mysql_error());
        	return false;
        }
        return true;
    }
 

whirlwind

TDD infected, paranoid
lucas: и что получится? одно значение? а надо содержимое всего массива. Хоть бы пробовали...

-~{}~ 09.06.04 15:15:

Все нужно разжевывать :)

PHP:
		$qtext = sprintf("SELECT %s,%s FROM %s WHERE %s='%s' ORDER BY %s",
			$this->Quote($this->_vc_config['FID']),
			$this->Quote($this->_vc_config['FFLG']),
			$this->Quote($this->_vc_config['TABLE']),
			$this->Quote($this->_vc_config['FOWN']),
			$this->Quote($gid),
			$this->Quote($this->_vc_config['FID']));
		if (!$db->Select($qtext)){ return false; }
Разница есть с нижеследующим?

PHP:
		if (!$this->SelectWQ("SELECT %s,%s FROM %s WHERE %s='%s' ORDER BY %s",
			$this->_vc_config['FID'],$this->_vc_config['FFLG'],
			$this->_vc_config['TABLE'],$this->_vc_config['FOWN'],
			$gid,$this->_vc_config['FID']))
		{
			return false;
		}
 

Demiurg

Guest
если я правильно понял, то тебе нужен call_user_func_array.
Только вот зачем таким странным способом составлять запрося я не понимаю.
 

whirlwind

TDD infected, paranoid
Для чего? Запросов много. Что бы разгрузить код от рутины. Например так

PHP:
        $format = array_shift($argv);
        $argv = array_map('mysql_escape_string',$argv);
        array_unshift($argv,$format);
        $qtext = call_user_func_array('sprintf',$argv);
		return $this->Select($qtext);
PS: Спасибо за помощь!

-~{}~ 09.06.04 15:43:

2lucas: Возмутил? А меня как возмутил! :)

PHP:
# Perl examples

($a,$b,$c,$d) = @_;

@array = ($a,$b,$c,$d);

@array = (localtime)[1,2,3,4];

@array = (@my_array,$a,$b,@your_array,$c,$d);

map { $self->Quote($_) } @argv;

# etc...
 

whirlwind

TDD infected, paranoid
tony2001: большое спасибо, ты меня задел. Я и не сомневался, что у людей, считающих что этот код выглядит естественнее

PHP:
function QueryWQ(){
   $argv = func_get_args();
   $format = array_shift($argv);
   $argv = array_map('mysql_escape_string',$argv);
   array_unshift($argv,$format);
   return $this->Query(call_user_func_array('sprintf',$argv));
}
нежели этот

PHP:
sub QueryWQ{
   ($self,$format,@argv) = @_;
   return $self->Query(sprintf($format,map { $self->Quote($_) } @argv));
}
как правило, завышенное самомнение.
 
Сверху