PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (1): [1]
Найдено сообщений: 7
Nicodinus
Отправлено: 14 Марта, 2012 - 16:13:37 • Тема: Задать значение массива в массиве • Форум: Объектно-ориентированное программирование
Ответов: 4 Просмотров: 1192
OrmaJever , это я написал, чтоб было хоть понятно что я хочу) Как бы функция независима, т.е. можно вызвать SetValueInArray('key1',.....,'key100500','value'), и она запишет в $array['key1']......['key100500'] значение 'value'
Вот как это сделать, я хз)
Nicodinus
Отправлено: 14 Марта, 2012 - 16:05:22 • Тема: Задать значение массива в массиве • Форум: Объектно-ориентированное программирование
Ответов: 4 Просмотров: 1192
PHP:
скопировать код в буфер обмена
class temp
{
public function GetValueFromArray( ) //Пример: вызов GetValueFromArray('key1','key2','key3','value') вернёт $array['key1']['key2']['key3']
{ //ps. Может быть есть более удобная функция?
$temp = null ;
for ( $i = 0 ; $i < sizeof ( $args ) - 1 ; $i ++ ) {
if ( ! $temp && isset ( $this -> vars [ $args [ $i ] ] ) ) $temp = $this -> vars [ $args [ $i ] ] ; else if ( isset ( $temp [ $args [ $i ] ] ) ) $temp = $temp [ $args [ $i ] ] ; else break ;
}
return $temp [ $args [ sizeof ( $args ) - 1
] ] ; }
public function SetValueInArray( )
{
//Как сделать так, чтоб можно было задать значение в массиве по ключам, заданным в $args ?
//Т.е. $array[$args[0]][$args[1]][$args[2]] = $args[3];
//$args[3] - само значение, $args[0] - $args[2] - ключи
}
public function __construct( )
{
$this -> vars [ 'key1' ] [ 'key2' ] [ 'key3' ] = 'value' ;
print_r ( $this -> GetValueFromArray ( 'key1' , 'key2' , 'key3' ) ) ; }
}
$test = new temp;
Собственно вопрос, как задать значение массива по ключам, заданным в $args ? (функция SetValueInArray)
ps. Можно ли как то упростить функцию GetValueFromArray ?
Nicodinus
Отправлено: 21 Февраля, 2012 - 11:54:32 • Тема: Вызов класса как функции • Форум: Объектно-ориентированное программирование
Ответов: 4 Просмотров: 1283
sKaa , спасибо огромное, помогло , жаль что + не могу поставить
(Добавление)
Zuldek , ты немного меня не понял , я не настолько туп, чтоб так не сделать, вон вариант с __invoke() тащит
PHP:
скопировать код в буфер обмена
class test
{
public function __invoke( )
{
$this -> add ( $args ) ;
}
public function add( $args ) //Сама функция
{
for ( $i = 1 ; $i < sizeof ( $args ) ; $i += 2
) $this -> vars [ $args [ $i - 1
] ] = $args [ $i ] ; //пример конечно не удачный, но другого я придумать не смог
}
}
$test = new test;
$test ( '123' , '456' , '789' , '012' ) ;
Nicodinus
Отправлено: 21 Февраля, 2012 - 11:44:05 • Тема: Вызов класса как функции • Форум: Объектно-ориентированное программирование
Ответов: 4 Просмотров: 1283
Собственно хотел узнать, возможно ли вызвать уже инициализированный класс как функцию?
Допустим имеем код
PHP:
скопировать код в буфер обмена
<?PHP
class test //Думаю тут нужно подключить интерфейс из spl или ещё какой-нить библиотеки, но какой не могу найти//
{
public function add( ) //Сама функция
{
for ( $i = 1 ; $i < sizeof ( $args ) ; $i += 2
) $this -> vars [ $args [ $i - 1
] ] = $args [ $i ] ; //пример конечно не удачный, но другого я придумать не смог
}
}
$test = new test;
$test ( $key1 , $value1 , $key2 , $value2 ) ;
?>
Nicodinus
Отправлено: 10 Января, 2012 - 17:13:16 • Тема: Проблема с is_file в while(true) цикле • Форум: Если скрипт не работает
Ответов: 2 Просмотров: 1900
В общем возникла необходимость проверять на существование "стоп" файла для парсера.
Собсно код:
PHP:
скопировать код в буфер обмена
<?PHP
if ( isset ( $_SERVER [ 'HTTP_HOST' ] ) ) die ( 'You can run this script only in the CMD prompt' ) ;
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' ,
'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4' ,
'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3' ,
) ;
function out
( $str = '' ) { echo date ( 'd.m.Y - H:i:s' ) . ': ' . $str . chr ( 13
) . chr ( 10
) ; }
out( 'starting...' ) ;
$p = 0 ;
$f2 = 0 ;
for ( $i = 1 ; $i < 79000 ; $i ++ )
{
{
}
if ( intval ( $i / 790
) != $p || $f2 == 0
) {
out( $p . '%' ) ;
$f2 = 1 ;
}
{
out( 'event - stop from file!' ) ;
out( 'this script will continue, after you remove the stop file' ) ;
out( '5 sec sleeping!' ) ;
while ( true )
{
out( 'sleep' ) ;
}
}
$ch = curl_init ( 'http://eu.battle.net/wow/ru/item/' . $i . '/tooltip' ) ;
if ( $code == 200)
{
out( 'item ' . $i ) ;
$t = fopen ( 'data/' . $i . '.txt' , 'w' ) ; }
}
?>
Эта:
часть, работает не так, как хотелось бы.
Создайте рядом со скриптом пустой файл "stop", запустите скрипт, подождите пару секунд и удалите файл. Казалось бы, if(!is_file('stop')) break; завершит цикл и парсер будет дальше парсить данные. Но нет, ему кажется, что файл существует, хотя функции на считывания работают нормально, т.е. выводят ошибку, что файл не существует. Можно и с помощью них обойтись, но хотелось бы услышать мнение форумчан.
пс. Если как то поможет, php 5.3.8, запускаю из консоли
Страниц (1): [1]
Powered by ExBB FM 1.0 RC1. InvisionExBB