[PHP] String bouwen met Array elementen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Mijn probleem is als volgt: ik wil een string (altijd bestaande uit integers, gescheiden door een punt) kunnen opsplitsen in elementen zonder die punt. Dit lukt aardig (met behulp van GoT: [rml][ PHP] arrays vraag![/rml]):

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$string = '1.8.26.43';
$array = explode(".", $string); 
$arrayTotal = count($array);

/* dit levert op:
 *
 * $array[0] = 1
 * $array[1] = 8
 * $array[2] = 26
 * $array[3] = 43
 * $arrayTotal = 4
 *
 */

Nu wil ik met die elementen (4 in dit geval) een nieuwe string kunnen bouwen, met elke gewenste lengte tussen 1 en $arrayTotal. Drie voorbeelden in pseudo-code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// om alleen $array[0] weer te geven
for ($i = 0; $i < 1; $i++)
{
    // doe iets waardoor de output '1' is
}

// om $array[0].$array[1] weer te geven
for ($i = 0; $i < 2; $i++)
{
    // doe iets waardoor de output '1.8' is
}

// om $array[0].$array[1].$array[2].$array[3] weer te geven
for ($i = 0; $i < 4; $i++)
{
    // doe iets waardoor de output '1.8.26.43' is
}

Wie kan mij op weg helpen met hetgeen er in deze loop moet gebeuren? Ik weet dat er iets moet gebeuren als (pseudo code voor weergeven van 1.8.26):
PHP:
1
2
3
$nieuweString = array('1', '8', '26')
$output = implode(".", $nieuweString);
echo $output; // geeft 1.8.26

De vraag is alleen hoe ik $nieuweString = array() automatisch gevuld krijg met het juiste aantal elementen. In het voorbeeld hierboven heb ik array('1', '8', '26') met de hand ingetikt - wat ik van iemand hier hoop te horen hoe deze automatisch gevuld kan worden. Ik hoop dat mijn vraag duidelijk is, zo laat in de avond :Y)

[ Voor 31% gewijzigd door Reveller op 17-01-2004 03:55 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

PHP:
1
2
3
4
for ($i = 0; $i < 4; $i++) 
{ 
          $output .= $array[$i].".";
}


Bedoel je zoiets?

Waarom wil je dit eigenlijk?

[ Voor 21% gewijzigd door Brakkie op 17-01-2004 04:06 ]

Systeem | Strava


Acties:
  • 0 Henk 'm!

  • Noel
  • Registratie: September 2001
  • Laatst online: 14-09 17:45
PHP:
1
2
3
4
5
6
$stralles = "";

for ($i = 0; $i < $arraycount; $i++)
{
    $stralles .= $array[$i] . ".";
}


Laatste . die je bij de string plakt moet je maar met een soort substring verwijderen. Of een testje inbouwen in je for lus als je het laatste element in de array tegenkomt. Mogelijkheden zat.. :)

[ Voor 8% gewijzigd door Noel op 17-01-2004 03:59 . Reden: Brakkie was me voor, zelfs op dit uur nog.. ;) ]

Server: Xeon X3430 21TB RAID 5 | Game: 5900X, 6900XT, dual FS2735 | Mobile: Lenovo X1 Carbon, Thinkpad T440s, Moto G7 Plus


Acties:
  • 0 Henk 'm!

Verwijderd

code:
1
2
3
4
5
<?
$nieuweString = array('1', '8', '26') 
$output = implode(".", $nieuweString); 
echo $output; // geeft 1.8.26
?>


$nieuweString kun je eventueel opbouwen mbv:
code:
1
2
for ($tmp = 0; $tmp < <max_elements> ; $tmp++)
  $nieuweString[$tmp] = $een_of_andere_array[$tmp];



of zoals hierboven al vermeld staat (met dank aan -Noel- :) :
code:
1
2
3
4
<?
$stralles = $array[0]; 
for ($i = 1; $i < $arraycount; $i++) $stralles .= ".".$array[$i]; 
?>


of
code:
1
2
3
4
5
<?
$stralles = ""; 
for ($i = 0; $i < $arraycount; $i++) 
   $stralles .= (($i!=0)?".":"") . $array[$i]; 
?>

[ Voor 80% gewijzigd door Verwijderd op 17-01-2004 04:03 ]


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
bedankt! ik ga ermee aan de slag. Brakkie: ik heb een child-parent mysql tabel (id | name | parent_id) en daar staat de boomstructuur van mijn site gedefinieerd. Op elke pagina binnen mijn site, wil ik een cookie crumb trail zetten, maar met een recursieve functie kost me dit flink veel queries. Ik ondervang dit door de trial in een variable in de querystring te stoppen: http://mijnsite/index?path=1.8.26.43. Nu kan ik in 1 query het pad naar de huidige pagina ophalen:
code:
1
2
3
4
5
6
7
8
9
10
SELECT name, id FROM categories WHERE id IN('1', '8', '26', '43')

retourneert (bv.) electronica > camera's > digitaal > sony

kijk nu alleen even naar het pad: ik moet de links hierin wel aanpassen:

<a href="?path=1">electronica</a> &gt; 
<a href="?path=1.8">camera's</a> &gt; 
<a href="?path=1.8.26">digitaal</a> &gt; 
<a href="?path=1.8.26.43">sony</a>

Ik hoop dat het zo duidelijk is?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Ik vind het wel een leuke oplossing eerlijk gezegd. Heb je al wat performance tests gedaan?

Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
nee, nog niet - ben eea nog aan het uitwerken, vandaar ook dit draadje 8) Bij eenvoudige queries ben je de meeste tijd kwijt om contact te leggen met MySQL; dat probleem wordt nu omzeild. Uiteraard ga ik eea later ook nog cachen, maar voorlopig moet ik eerst dit maar eens aan de praat krijgen ;) Als iemand nog aanvullende ideeen heeft, hoor ik ze graag :)

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Heb je ook al nagedacht om het geheel straks custom te kunnen sorteren? Daar had ik namelijk de meeste performace problemen mee. Vooral als je de volgorde wilt wijzigen.

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
5
6
7
$array = (1,8,26,43);
foreach ($array as $nr) {
     $where .= $nr.",";
}
$where = substr($where, 0, (strlen($where)-1));

$sql = "SELECT name, id FROM categories WHERE id IN (".$where.")";
Dit bedoel je?

[ Voor 10% gewijzigd door Verwijderd op 18-01-2004 12:55 . Reden: klein bugje ;) ]

Pagina: 1