Autor Zpráva
DarkMeni
Profil
Zdravim, jde nějak nastavit kurzor v poli na prvek se zadaným klíčem a potom vzhledem k němu vybrat předchozí a následující prvek?

Mám pole obrázků
<?php
$images = array(
  "image1.jpg" => "Název 1. obrázku",
  "image2.jpg" => "Název 2. obrázku",
  "image3.jpg" => "Název 3. obrázku",
  "image4.jpg" => "Název 4. obrázku"
);
?>

a po odeslání požadavku s klíčem požadovaného obrázku chci zjistit jeho název
<?php
include "images-database.php";
$image = isset($_GET["image"]) ? $_GET["image"] : key($images);
$name = isset($images[$image]) ? $images[$image] : false;
$path = "images/$image";
if(!$name or !file_exists($path)){
  $name = "Obrázek nebyl nalezen";
  $path = "images/notfound.jpg";
}
//$next, $prev
?>
a adresu (klíč) předchozího a následujícího obrázku

Jde použí nějaká funkce, která by nastavila kurzor na klíč $image? Něco jako set_pointer($images, $image);
Nebo budu muset projít prvek po prvku, posouvat ukazatel a zjišťovat jestli sem už náhodou nenarazil na požaovanej klíč?

V tom případě mě docela zajímá jestli nebude efektivnější použít 2 pole (s číselným indexem) kde index adresy obrázku bude odpovídat indexu názvu obrázku
Tori
Profil
Tohle by se dalo upravit pro asoc. pole: http://www.php.net/manual/en/class.seekableiterator.php (ale prakticky byste asi taky měl uvnitř 2 pole, pro klíče a hodnoty). O jak velkém poli obrázků mluvíme?
DarkMeni
Profil
Přibližně tak 30 obrázků
Ten SeekableIterator by pak musel taky procházet prvek po prvku, že?
Takže to zkusim teda udělat přes 2 pole, jen to bude možná trochu nepřehledný (ale to pude okomentovat)

Díky
anonymní
Profil *
DarkMeni:
nebylo by lépe pracovat s dvourozměrným polem?

$images = array (
    0 => array ('nazev', 'text'),
    1 => array ('nazev', 'text'),
    ...
)

Sice je to jiné pole, ale v rozjezdu projektu by se s ním možná dalo ještě něco dělat. Isset na klíč +-1 bude rychlejší než nějaké složitější algoritmy na hledání přechozího/následujícího klíče.
DarkMeni
Profil
Takle nějak to právě že nakonec chci udělat, akorát přes 2 pole
$image_path = array(
  "image1.jpg",
  "image2.jpg"
);
$image_name = array(
  "Název 1. obrázku",
  "Název 2. obrázku"
)

A napadlo mě, že by sem mohl ty obrázky ukládat jako array(1 => "01-obrazek.jpg", "02-obrazek2.jpg") a ták, a potom jen získat to číslo na začátku a tím dostanu rovnou index

Přes dvourozměrné pole to je i přehledný, ale myslim si že php rychleji vytvoří 2 obyčejná pole než 1 pole a v tom dalších 30 polí
Ale nevim, každopádně díky, možná to udělám i přes to dvourozměrné pole
abc
Profil
myslim si že php rychleji vytvoří 2 obyčejná pole než 1 pole a v tom dalších 30 polí
V tom asi nebude moc velký rozdíl...

Ale můžeš pole definovat jako static:
static $images = array(
);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0