Функция + случаен размер

Hous

Registered
Ползвам тази функция:
Код:
function titl( $string) {
		$string = ucfirst($string);
		$string = preg_replace("/_/", " ", $string);
		$string = explode(".", $string);
		return $string[0];
		}
по този начин:
Код:
echo titl($row);
и се показват записите от дб във вид Asd ddd ddd
сега се чудя как да направя така,че да се показват със случаен размер ,тоест

ddddddd Asd dddd asdk

като размерите варират от 12px = 21px
но така,че не при всеки рефреш да се дава случаен размер а при определен знак,примерно всички думи започващи с B да са със размер 14 ,всички започващи със D 16 и тн (или по някакъв подобен метод но да се запазва размера на определени думи а не при всеки рефреш да се дава случаен...)
Нещо като tagove ми трябва.

пс:Моя опит:
Код:
$font_size = ceil(mt_rand(12,21));
echo "<a href='' style='font-size:".$font_size."px'>".ttitl($row)."</a> ";
някой може ли да помогне?
 
Ами ако например в дб добавиш поле h

и това поле садаржа дадения h1,2,3,4,5,6 за различния стринг и после като го вадиш го викаш заедно с него

или просто направиш така
Код:
$h = rand(12,21);
echo '<h' . $h . '>$string</h ' . $h . '>';
 
Само си сложи твоите explode и preg_replace. :)

Също така вместо $string[0], може да ползваш mb_substr(); , защото мисля, че $string[0] <- този метод, са го махнали във PHP 6, за това ползвай mb_substr();


На мястото на

PHP:
 $stringFirst = $string[0];

слагаш

PHP:
 $stringFirst = mb_substr($string, 0, 1, 'UTF-8');

Който от методите прецениш за правелен, ползвай него.
Ако чакаш само латинси букви ползвай само substr и без 'UTF-8', но ако има и кирилица, ползвай този, който ти пратих по - горе.


PHP:
function titl($string) {
     
    $Arr = array(
        'h1' => 'A', 
        'h2' => 'B', 
        'h3' => 'C', 
        'h4' => 'D', 
        'h5' => 'E', 
        'h6' => 'F', 
      );
    
    $string = ucfirst($string);
    $stringFirst = $string[0];
    
    $key = array_search($stringFirst, $Arr);
    
    return "<".$key.">".$string."</".$key.">";
    
      }

      $data = array('apple', 'elha', 'drum', 'fun');
      foreach ($data as $d) {
          echo titl($d)."<br />";
      }
 
@eddyy93 кога е излязаъл php 6 :shock: аз ли съм сляп или в сайта им не виждам информация за 6ца-та
PHP 5.4.7 and PHP 5.3.17 released! Това е последната версия до колкото знам, а 6ца-та все още се разработва
 
Пробвай array_walk().

PHP:
array_walk($arr, "random", range(5, 60)); //пиксели

нещо такова, не мога да тествам, защото пиша от тела.


Едит: а може и нещо такова

PHP:
array_walk($arr, function(&$val) {
               $val = random(5, 60);
}
 
Знаех си ,че трябва да добавя,самия запис в бд-то е във вида asd_dfd и главното което е ми трябва това със размера но идеята е asd и dfd да са 2 различни думи със два различни линка и размери...
тоест трябва да ги "разпадна" на отделни думи (чррез масив май ще стане не съм сигурен) и тогава да мисля как ще стане размера на шрфита...

Ще помъча малко по-късно и ще пиша пак,защото аз малко ви заблудих,благодаря за отговорите до сега. :)
 
Сега ти на абсолютно рандом начин ли искаш да са или ако имаш буквите A, B, C да кажем те да станат h1, а ако имаш D, E , F те да станат h2 и т.н.

При нито един от 2 та случая, не ти трябва да добавяш нищо в базата данни.


EDIT:

Ако е втория случай, ползвай ето това:

Като добавяш буквите във масива, който искаш да съответстват на h1, h2 и т.н.

И отново това за substr(); което ти казах по - горе.

PHP:
function titl($string) {
     
    $Arr = array(
        'h1' => array('A', 'G'), 
        'h2' => array('B'), 
        'h3' => array('C'), 
        'h4' => array('D'), 
        'h5' => array('E'), 
        'h6' => array('F'), 
      );
    
    $string = ucfirst($string);
    $stringFirst = $string[0];

    foreach($Arr as $key => $valueArr) {
    
        
        if(in_array($stringFirst, $valueArr)) {
            return "<".$key.">".$string."</".$key.">";
        }
    }
 }

      $data = array('apple', 'elha', 'drum', 'fun', 'gygyba');
      foreach ($data as $d) {
          echo titl($d)."<br />";
      }
 
Код:
$nametag=explode(".", $name);

$tags = preg_split('/_/', $nametag[0], -1, PREG_SPLIT_OFFSET_CAPTURE);

foreach ($tags as $tag){
$size=strlen($tag[0]);
echo " <a href='' style='font-size:".($size+10)."px;'>".$tag[0]."</a> ";
}
Може ли някой да помогне ,всички дублирани стойности от масива $tags да се "съединят" тоест примерно имаме 5 стойности:
edno
dve
tri
chetiri
edno


да слее еднаквите и да останат така:edno dve tri chetiri
 
PHP:
		$get = mysql_query("SELECT * FROM messages") or die (mysql_error());
		while ($gg = mysql_fetch_array($get)) {
				$rr = rand(1,7); 
				echo "<font size='$rr'>$gg[message]</font>";
}

при мен работи отлично
 
Извинявай,че не прочетох правилно.Ти искаш примерно ако думата започва с "Б" да е с различен размер шрифт ?

$example = "Здравей,аз съм тук"

$words = explode(" ", $example);
$letters = "";
foreach ($words as $value) {
$letters .= substr($value, 0, 1);
}
echo "$letters<br/>";
}

това ще ти изведе "З" "А" "С" "Т" ,защото това са първите букви на всяка дума,използвана по-горе.И след това с кода,който дадох в миная пост като го попромениш малко ще се получи.
 
аз повечето го направих по друг начин (по-лесен за мен) и бих желал малко помощ да елиминирам дублиращи се стойности (в предния ми пост съм дал кода който използвам)
:?:
 
Да опитах,още онзи ден... изкарва само първата стойност :lol:
Код:
$tags = preg_split('/_/', $nametag[0], -1, PREG_SPLIT_OFFSET_CAPTURE);
$tagz=array_unique($tags);
foreach ($tagz as $tagzz);
echo $tagzz[0];

а ако опитам със echo $tagzz изкарва array array array...
 
array_unique не ти работи правилно защото масива ти е двуизмерен (two dimensional), трябва масива да го направиш едномерен масив, това става като пуснеш масива във цикъл и стойностите ги запишеш във друг масив, ето този пример долу съм го направил по твоя код.

PHP:
      $data = 'eheeeeeeeee_kusa2_kusa2_dumaDulga3_dumata4_dma5_duma6.mp3';
      
$nametag=explode(".", $data);

$tags = preg_split('/_/', $nametag[0], -1, PREG_SPLIT_OFFSET_CAPTURE);





$NewArr = array();

foreach ($tags as $t) {
   $NewArr[] = trim($t[0]);
}

$NewArr = array_unique($NewArr);



foreach ($NewArr as $tag){
$size=strlen($tag);



echo " <a href='' style='font-size:".($size+10)."px;'>".$tag."</a> ";
}
 
Ясно къде е бил проблема,да си кажа честно това ми е 3-тия път в който се сблъсквам със масиви... и ми е доста слабо познанието.
Вече се засилва.
Thanks за помощта,много помогна! :)
+1 дано другтие не се засегнат защото и те помогнаха!
 
Ето този пример е леко по - оптимизиран:

При първия със 2 та цикъла времето за изпълнение е:
0.00025 (средно)

При този вариант е:
0.00012 (средно)

PHP:
$data = 'eheeeeeeeee_kusa2_kusa2 _dumaDulga3_dumata4_dma5_duma6.mp3';
      
$nametag=explode(".", $data);

$tags = explode('_', $nametag[0]);



$tags = array_map('trim', $tags);

$NewArr = array_unique($tags);



foreach ($NewArr as $tag){
$size=strlen($tag);



echo " <a href='' style='font-size:".($size+10)."px;'>".$tag."</a> ";
}
 

Горе