Jump to content
php.lv forumi

Random bildes izvade


Paulinjsh

Recommended Posts

Nepieciešams no diras izvadīt 3 bildes tā, lai tās būtu dažādas un pēc random.

Uztaisīju uz ātro šitādu skriptu:

<div id="bildes">
<?
$dir = opendir("images/");
$i = 0;
while ( ( false !== ( $fails = readdir( $dir ) ) ) && $i < 3 ) {
if ( eregi( '(jpg|jpeg|gif|png|bmp)$', $fails ) ) {
	if ( rand( 0, 1 ) == 1 ) {?>
		<img src="images/<? echo $fails ?>" alt="<? echo $fails ?>" title="<? echo $fails ?>"
		style="width: 150px; height:100px;" /><br /><?
		$i++;
	}
}
}
?>
</div>

Kādas problēmas:

Var sanākt gadījums, kad izvada 0, 1 vai 2 bildes. Tas neder, jo vajaga izvadīt tieši 3 bildes. Kā šito varētu atrisināt?

Link to comment
Share on other sites

kaut vai arī liec randomās vērtības masīvā kuru pārbaudi vai nesatur katru nākošo randomo vērtību :)

 

var shaadi .....

function randomaizeris($min,$max,$num) {
$ret = array();

if ($max<($num-1))
{
return false;
}
while (count($ret) <$num) {
  do {
   $a = rand($min,$max);
  }
  while (in_array($a,$ret));
  $ret[] = $a;
}
return($ret);
}
////////   ielasi visus urljus masiivaa  teiksim $masivs
// $min = sakuma vertiiba - tavaa gadijumaa 0
// $max= beigu vertiiba tev  cik  to bilzju urlju sanaak
// $num = cik gribi izvadiit

$kura_bilde=randomaizeris($min,$max,$num);

// $kura_bilde =  masiivs no $num skaitljiem 
$masivs[$kura_bilde];	// bildes izvadiishana

--------

Link to comment
Share on other sites

in_array() nav ātrs - O(n) laikā (vajag skriet visiem elementiem cauri).

Labāk darīt šādi:

$ret[$a] = true; // uzstāda, ka ir bijis

// skatās vai ir bijis
if (array_key_exists($a, $ret)) { ... // ir iekš masīva } else { ... // nav iekš masīva }

Tad noteikšanas laiks tuvosies O(1). Jo asociatīvais masīvs php tiek realizēts kā heštabula.

Edited by bubu
Link to comment
Share on other sites

<div id="bildes">
<?
$dir = opendir("images/");
$urlArray = array();

while ( ( false !== ( $fails = readdir( $dir ) ) ) ) {
if ( eregi( '(jpg|jpeg|gif|png|bmp)$', $fails ) ) {
	array_push( $urlArray, $fails );
}
}
for ( $i = 0; $i < 3; $i++ ) {
$id = rand( 0, count( $urlArray ) - 1 );
<img src="images/<? echo $urlArray[$id] ?>" alt="<? echo $urlArray[$id] ?>"
style="width: 150px; height:100px;" /><br /><?
unset( $urlArray[$id] );
$tmp = array();
foreach ( $urlArray as $index => $key ) {
	array_push( $tmp, $key );
}
$urlArray = $tmp;
}
?>
</div>

 

Nu es uzrakstīju šitā. Kādi komentāri? Pašam izskatās nedaudz līki :)

Link to comment
Share on other sites

$tmp = array();
foreach ( $urlArray as $index => $key ) {
	array_push( $tmp, $key );
}
$urlArray = $tmp;

vietā var

$urlArray = array_values($urlArray);

Bet ja gribi vēl ātrāk - tad vajag uz array_slice() skatīties.

Link to comment
Share on other sites

O, array_values() šitādu funkciju nebiju piefiksējis. Pamēģināsim un to array_slice() arī aplūrēšu :)

 

Thnx!

 

A bubu ar array_slice() sanāk šitā $urlArray = array_slice($urlArray, 0); a ko tas 2 dod es neiebraucu un kur šķirba arī īsti nē ;/

Edited by Paulinjsh
Link to comment
Share on other sites

<?php
$a=glob("images/{*.gif,*.jpg,*.jpeg,*.png}", GLOB_BRACE);
$b=count($a)-1;
srand((double)microtime()*1000000);
$c=rand(0,$b);
echo $a[$c];
$c=rand(0,$b);
echo $a[$c];
$c=rand(0,$b);
echo $a[$c];
?>

Edited by blackhalt
Link to comment
Share on other sites

Tavā skriptā nesanāk unikālas bildes vai arī es kļūdos? Un kāda jēga srand izsaukt 3 reizes, ja manuprāt pietiek ar 1.?

unikālas vienmēr nesanāks gan :/

nu bet ~ ;)

tad jāparbauda vai tāds un tāds nav =

bet nu šitāds man te uzrakstījās.

Edited by blackhalt
Link to comment
Share on other sites

×
×
  • Create New...