Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Array mit einer Art Index ansprechen (https://www.delphipraxis.net/67288-%5Bphp%5D-array-mit-einer-art-index-ansprechen.html)

Matze 12. Apr 2006 13:38


[PHP] Array mit einer Art Index ansprechen
 
Hi,

ich muss mal wieder ein wenig mit PHP nerven. ;) Im Folgenden ist ein Code-Ausschnitt zu sehen. Dort benötige ich in der foreach-Schleife den Wert der Spalte 'prod_img' aus dem $arr_products_single_data-Array mit der zugehörigen 'prod_id'.

Das Array sieht so aus (es wird später deutlich mehr Einträge enthalten):

Code:
Array ( [prod_id] => 14 [prod_img] => product_1.jpg )
Anhand der 'prod_id', die ich habe, möchte ich nun auf diesen Array-Eintrag zugreifen können, nur weiß ich absolut nicht, wie ich das bewerkstelligen soll. Schön wäre natürlich etwas wie

Code:
$arr_products_single_data[14]
Natürlich geht es so nicht, da sist klar. Und das Array kann ich nicht ändern, das muss so aufgebaut sein, wie es aktuell der Fall ist.

Hier nun der Code. Mein Problem liegt in der Zeile, in der ich 'IMAGE' das Bild zuweisen muss:

Code:
[color=#11117F]$arr_products_single_data[/color] = [color=#11117F]get_sql_array[/color]([color=#E60000]"SELECT prod_id, prod_img FROM "[/color] .
   [color=#11117F]PRODUCTS_DATA[/color] . [color=#E60000]" WHERE prod_cat_id = "[/color] . [color=#11117F]sqlval[/color]([color=#11117F]$id[/color]), 0);
   
[color=#11117F]$arr_products[/color] = [color=#11117F]get_sql_array[/color]([color=#E60000]"SELECT id, prod_title, prod_subtitle,
   prod_short_desc FROM "[/color] . [color=#11117F]PRODUCTS[/color] .
    [color=#E60000]" WHERE id = "[/color] . [color=#11117F]sqlval[/color]([color=#11117F]$arr_products_single_data[/color][[color=#E60000]'prod_id'[/color]]) .
   [color=#E60000]" AND lang_id = "[/color] . [color=#11117F]sqlval[/color]([color=#11117F]$site_lang[/color][[color=#E60000]'id'[/color]]));
                
[color=#11117F]$prod_cat[/color] = [color=#11117F]get_sql_array[/color]([color=#E60000]"SELECT id, prod_cat_title,
   prod_cat_description FROM "[/color] . [color=#11117F]PRODUCT_CATEGORIES[/color] . [color=#E60000]" WHERE id = "[/color] .
   [color=#11117F]sqlval[/color]([color=#11117F]$id[/color]) . [color=#E60000]" AND lang_id = "[/color] . [color=#11117F]sqlval[/color]([color=#11117F]$site_lang[/color][[color=#E60000]'id'[/color]]), 0);

[color=#FFA200]// show each product[/color]
[color=#2B8E10]foreach[/color] ([color=#11117F]$arr_products as $product[/color])
{
   [color=#11117F]$template[/color]->[color=#11117F]set_block[/color]([color=#E60000]'products_overview'[/color], [color=#2B8E10]array[/color](
      [color=#E60000]'IMAGE'[/color] => [color=#FFA200]// <== Hier ;-)[/color]
      [color=#E60000]'TITLE'[/color] => [color=#11117F]$product[/color][[color=#E60000]'prod_title'[/color]],
      [color=#E60000]'SUBTITLE'[/color] => [color=#11117F]$product[/color][[color=#E60000]'prod_subtitle'[/color]],
      [color=#E60000]'SHORT_DESC'[/color] => [color=#11117F]nl2br[/color]([color=#11117F]$product[/color][[color=#E60000]'prod_short_desc'[/color]]),
      [color=#E60000]'PROD_LINK'[/color] => [color=#11117F]$config_main[/color][[color=#E60000]'domain'[/color]] . [color=#E60000]'index.php?page=product_show&amp;id='[/color] .
         [color=#11117F]$product[/color][[color=#E60000]'id'[/color]] . [color=#11117F]$link_lang_param[/color]
      )
   );
}
Ich könnte natürlich auch die SQL-Abfrage für 'prod_img' in die Schleife packen, doch ist das ganze dann nicht mehr so performant, denke ich mal, wenn ich hunderte EInträge in der Datenbank habe. Wie würdet ihr das lösen?

alcaeus 12. Apr 2006 13:40

Re: [PHP] Array mit einer Art Index ansprechen
 
Hmm...mit einer Schleife:
Code:
$newar = array();
foreach ($ar as $id => $val)
{
  $newar[$id] = $val;
}
;)

Greetz
alcaeus

Matze 12. Apr 2006 13:41

Re: [PHP] Array mit einer Art Index ansprechen
 
Hi

Zitat:

Zitat von alcaeus
Hmm...mit einer Schleife

Meinst du nicht, dass das Ganze dann sehr langsam wird?

alcaeus 12. Apr 2006 13:47

Re: [PHP] Array mit einer Art Index ansprechen
 
Zitat:

Zitat von Matze
Hi

Zitat:

Zitat von alcaeus
Hmm...mit einer Schleife

Meinst du nicht, dass das Ganze dann sehr langsam wird?

Nicht wirklich; um wieviel Datensaetze geht es denn?

Ausserdem hatte mein Code einen Fehler :oops:
Code:
$newar = array();
for ($i = 0, $count = count($ar); $i < $count; $i++)
{
  $newar[$ar[$i]['prod_id']] = $ar[$i];
}
Greetz
alcaeus

Matze 12. Apr 2006 13:49

Re: [PHP] Array mit einer Art Index ansprechen
 
Zitat:

Zitat von alcaeus
Nicht wirklich; um wieviel Datensaetze geht es denn?

Wie viele produkte die Firma anbietet weiß ich nicht. Angenommen, es wären 10000 (so viele werden es wohl nicht sein, denke ich), dann wäre eine SQL-Abfrage vielleicht doch geeigneter, sonst habe ich ja gigantische Arrays. Aber wenn ich ständig DB-Abfragen schicke, ist das vielleicht auch nicht so der Hit :gruebel:

alcaeus 12. Apr 2006 13:51

Re: [PHP] Array mit einer Art Index ansprechen
 
Zitat:

Zitat von Matze
Wie viele produkte die Firma anbietet weiß ich nicht. Angenommen, es wären 10000 (so viele werden es wohl nicht sein, denke ich), dann wäre eine SQL-Abfrage vielleicht doch geeigneter, sonst habe ich ja gigantische Arrays. Aber wenn ich ständig DB-Abfragen schicke, ist das vielleicht auch nicht so der Hit :gruebel:

Definitiv nicht. Ausserdem bezweifle ich, dass alle 10000 Datensaetze auf einmal angezeigt werden muessen, oder auch nur auf die Art und Weise benoetigt werden. Das waere ja mal ein Krasser Produktkatalog :shock:

Greetz
alcaeus

Matze 12. Apr 2006 13:53

Re: [PHP] Array mit einer Art Index ansprechen
 
Zitat:

Zitat von alcaeus
Ausserdem bezweifle ich, dass alle 10000 Datensaetze auf einmal angezeigt werden muessen, oder auch nur auf die Art und Weise benoetigt werden. Das waere ja mal ein Krasser Produktkatalog :shock:

*rofl* Ne, da kommt schon noch eine Pagination rein, doch wie ich es gerade habe, müsste ich immer alle Datensätze in das Array einlesen. Irgendwie ne blöde Lösung. *g*
Wenn das mit der Datenbank wirklich nichts ausmacht (Ich möchte keine Page-Gen-Time über 0.006 Sekunden, die gefallen mir grad so :mrgreen: ), dann werde ich das so machen, danke. :)

alcaeus 12. Apr 2006 13:56

Re: [PHP] Array mit einer Art Index ansprechen
 
Zitat:

Zitat von Matze
Wenn das mit der Datenbank wirklich nichts ausmacht (Ich möchte keine Page-Gen-Time über 0.006 Sekunden, die gefallen mir grad so :mrgreen: ), dann werde ich das so machen, danke. :)

Wie meinen? Der Datenbank macht dein zweites Array gewiss nichts aus. Anschliessend kommt es ja nur noch auf die Anzahl der Felder pro Row an...evtl. koennte das Script etwas viel Speicher benoetigen. Aber mal ehrlich, auch wenn du ne Pagination hast wirst du wohl kaum alle 10000 Artikel auf einmal benoetigen? Ich sag nur
SQL-Code:
LIMIT
Greetz
alcaeus

Matze 12. Apr 2006 14:04

Re: [PHP] Array mit einer Art Index ansprechen
 
Ja, das ist mir klar. Würde ich es mit einer Datenbankabfrage lösen, kann ich ja direkt in der foreach-Schleife 'prod_img' ermitteln. Dann habe ich halt pro Schleifen durchlauf nochmals eine Datenbankabfrage. Wenn das nichts ausmacht (ich habe keine Ahnung, wie robust so 'ne Datenbank ist), dann ist das wohl die beste möglichkeit. LIMIT kommt dann zur Abfrage von $arr_products, das würde dann eigentlich passen.

S2B 12. Apr 2006 17:40

Re: [PHP] Array mit einer Art Index ansprechen
 
Ähm, bitte keine Datenbankabfragen (zumindest keine SELECTs) in Schleifen, das ist nicht gut... :stupid: Verbinde die verschiedenen Tabellen mit JOINs. :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz