Ответы пользователя по тегу PHP
  • Как добавить значение в массив при переборе его в foreach?

    @Dubrovin
    $oneArray = [[ '1' => 'a', '2' => 'b' ]];
    $twoArray = [[ 'qq' => 'q', 'bb' => 'b' ]];
    
    foreach ( $oneArray[] as $one ) {
    	foreach ( $twoArray[] as $two ) {
    		if( $one === $two ){
    			$oneArray[]['type'] = $one;
    		}
    	}
    }
    Ответ написан
    Комментировать
  • Как создать хэш из строки типа md5 с минимальным набором символов a-zA-Z (без цифр) и с минимальными коллизиями?

    @Dubrovin Автор вопроса
    В общем я искал альтернативу вот такому коду:
    function string_to_short_md5( $string ) {
    
    			$result = '';
    
    			$alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    			$raw      = md5( $string, true );
    			$length   = strlen( $this->dec_to_base( $alphabet, 2147483647 ) );
    
    			foreach ( str_split( $raw, 4 ) as $dword ) {
    				$dword = ord( $dword[0] ) + ord( $dword[1] ) * 256 + ord( $dword[2] ) * 65536 + ord( $dword[3] ) * 16777216;
    
    				$result .= str_pad( $this->dec_to_base( $alphabet, $dword ), $length, $alphabet[0], STR_PAD_LEFT );
    			}
    
    			return $result;
    		}
    
    		function dec_to_base( $alphabet, $dword ) {
    			$rem = (int) fmod( $dword, strlen( $alphabet ) );
    			if ( $dword < strlen( $alphabet ) ) {
    				return $alphabet[ $rem ];
    			}
    
    			return $this->dec_to_base( $alphabet, ( $dword - $rem ) / strlen( $alphabet ) ) . $alphabet[ $rem ];
    		}

    Который возвращает md5 строки в base52 (24 символа a-zA-Z).
    В результате нашёл более короткое решение:
    strtr( base_convert( md5( $string ), 16, 36 ), '0123456789', 'ABCDEFGHIJ' );

    Которое возвращает md5 строки в base36 (24-25 символов a-zA-Z).

    Всем спасибо за помощь!
    Ответ написан
    Комментировать
  • Как в бд хранить только последнии 20 записей?

    @Dubrovin
    После добавления новой записи получайте количество записей, если их больше 20, то удаляйте самую старую.
    Ответ написан
    2 комментария
  • Как реализовать паттерн модуль на PHP?

    @Dubrovin Автор вопроса
    Я в общем нашёл решение. Головной класс Framework наследуется от Singleton. Экземпляры отдельных классов (модулей) создаются в методе init класса Framework через new и сохраняются в свойства класса Framework. Модули общаются друг с другом только через фреймворк из любой части кода, например Framework::i()->file_system->get_contents( $file ). Таким образом, модули ничего не знают друг про друга. Если модуль при каких-либо условиях не должен загружаться, то он оборачивается в условие в методе init и экземпляр этого модуля не создаётся.
    Очень странно, что мало кто разбирается в архитектуре и все дают ответы в виде "лозунгов" без конкретных примеров кода.
    Ответ написан