[PHP]Gegenereerde variabele in functie gebruiken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Ebayzo
  • Registratie: Juli 2001
  • Laatst online: 17-10-2022
Ben dus al de hele middag bezig met het volgende probleem. Ik gebruik de volgende functie:

PHP:
1
$resultaat = array_merge(array_intersect( ... );


Op de plek van de ... moet een variabele lijst met array's komen. Bijv:

code:
1
$testarray[0], $testarray[1], $testarray[2], $testarray[3]


Maar deze lijst kan dus verschillen van grootte. De ene keer is het een lijst van 2 array's, en de andere keer zijn er 5 array's.

Maar hoe kan ik een gegenereerde string met deze lijst gebruiken in de functie? Ik ben in het forum al een aantal "oplossingen" tegengekomen, maar deze lossen niets op (o.a. met eval() ). Zie ik nu iets over het hoofd? Of kan dit gewoon niet?

[ Voor 22% gewijzigd door Ebayzo op 25-11-2005 15:28 ]

Default blanke hetero


Acties:
  • 0 Henk 'm!

Verwijderd

Je hebt dus een string, bijv. "1,2,3,4"? Dan kun je daar een array van maken m.b.v. explode(). Of bedoel je dat niet?

Hmms het zijn dus meerdere array's. Maar dat zou je moeten genereren vanuit een string?? Kun je iets duidelijker zijn wat je input is?

[ Voor 40% gewijzigd door Verwijderd op 25-11-2005 15:29 ]


Acties:
  • 0 Henk 'm!

  • Ebayzo
  • Registratie: Juli 2001
  • Laatst online: 17-10-2022
Verwijderd schreef op vrijdag 25 november 2005 @ 15:28:
Je hebt dus een string, bijv. "1,2,3,4"? Dan kun je daar een array van maken m.b.v. explode(). Of bedoel je dat niet?
Nee dat bedoel ik niet :+ De lijst die ik aangeef boven wordt dynamisch gegenereerd, en die lijst moet in de functie gebruikt kunnen worden...

Default blanke hetero


Acties:
  • 0 Henk 'm!

Verwijderd

Hoe ziet 'die lijst' er voor die functie eruit?

Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Wat bedoel je met "variabele lijst met array's"? Een array is al redelijk variabel, als we het hebben over het aantal elementen in een array. Jij wilt eigenlijk een multidimensionale array (Een array van array's) door array_intersect duwen?

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

Je geeft nu geen array door, alleen losse items uit een array. Waarom zet je deze items niet in een aparte array en geef je die door als parameter?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Ebayzo
  • Registratie: Juli 2001
  • Laatst online: 17-10-2022
Verwijderd schreef op vrijdag 25 november 2005 @ 15:29:
Hoe ziet 'die lijst' er voor die functie eruit?
Ebayzo schreef op vrijdag 25 november 2005 @ 15:27:Op de plek van de ... moet een variabele lijst met array's komen. Bijv:

code:
1
$testarray[0], $testarray[1], $testarray[2], $testarray[3]


Maar deze lijst kan dus verschillen van grootte. De ene keer is het een lijst van 2 array's, en de andere keer zijn er 5 array's.

Default blanke hetero


Acties:
  • 0 Henk 'm!

  • Ebayzo
  • Registratie: Juli 2001
  • Laatst online: 17-10-2022
Creepy schreef op vrijdag 25 november 2005 @ 15:30:
Je geeft nu geen array door, alleen losse items uit een array. Waarom zet je deze items niet in een aparte array en geef je die door als parameter?
Het is een multi-dim. array.

Default blanke hetero


Acties:
  • 0 Henk 'm!

Verwijderd

Zie de reactie van creepy, stop die losse arraywaarden in 1 array...

Het is nu geen multidimensionale array hoor... Tenminste niet in het voorbeeld dat je gaf.
Maar hoe kan ik een gegenereerde string met deze lijst gebruiken in de functie?
En wat bedoel je hiermee?

[ Voor 73% gewijzigd door Verwijderd op 25-11-2005 15:32 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Ik snap het volgens mij niet helemaal goed, maar je hebt dus een gegenereerde string waarin de parameters staan. Die wil je dan gebruiken in die gegeven functies.

Je zou dat zo kunnen doen:
PHP:
1
2
$resultaat = null;
eval('$resultaat = array_merge(array_intersect(' . $gegenereerde_string . '));');

Of begrijp je je probleem niet helemaal goed?

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Ebayzo
  • Registratie: Juli 2001
  • Laatst online: 17-10-2022
Verwijderd schreef op vrijdag 25 november 2005 @ 15:31:
Zie de reactie van creepy, stop die losse arraywaarden in 1 array...

Het is nu geen multidimensionale array hoor... Tenminste niet in het voorbeeld dat je gaf.
$testarray[0] bevat onderliggende items. $testarray[0][12] bijv...dan is het toch een multi-dim. array?
Michali schreef op vrijdag 25 november 2005 @ 15:32:
Ik snap het volgens mij niet helemaal goed, maar je hebt dus een gegenereerde string waarin de parameters staan. Die wil je dan gebruiken in die gegeven functies.

Je zou dat zo kunnen doen:
PHP:
1
2
$resultaat = null;
eval('$resultaat = array_merge(array_intersect(' . $gegenereerde_string . '));');

Of begrijp je je probleem niet helemaal goed?
Volgens mij begrijp je het wel goed! Momentje. Ik ga even met je tip aan de gang.

[ Voor 43% gewijzigd door Ebayzo op 25-11-2005 15:34 ]

Default blanke hetero


Acties:
  • 0 Henk 'm!

Verwijderd

In gegenereerde_string staat een lijst met multidim. array's? 8)7

Acties:
  • 0 Henk 'm!

  • Ebayzo
  • Registratie: Juli 2001
  • Laatst online: 17-10-2022
Verwijderd schreef op vrijdag 25 november 2005 @ 15:36:
In gegenereerde_string staat een lijst met multidim. array's? 8)7
Ik wil een STRING met daarin de ARRAY NAMEN in die functie includen.

Default blanke hetero


Acties:
  • 0 Henk 'm!

Verwijderd

Ebayzo schreef op vrijdag 25 november 2005 @ 15:38:
[...]
Ik wil een STRING met daarin de ARRAY NAMEN in die functie includen.
Tsja, dat had je nergens vermeld... Maar probeer dat eens inderdaad.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Als je nou een string zou hebben met enkel de indices komma-seperated dan zou je zoiets kunnen doen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$testarray = array();
$testarray[1] = array('red', 'green', 'orange');
$testarray[2] = array('yellow', 'green', 'red');
$testarray[3] = array('green', 'blue', 'orange');

$string = '1,2,3';
$arrays = explode(',', $string);

$result_array = $testarray[current($arrays)];
while (($index = next($arrays)) !== false)
{
    $result_array = array_intersect($result_array, $testarray[$index]);
}

print_r($result_array);


Het resultaat van de intersect hoef je overigens niet nog eens door array_merge te halen aangezien dat al 1 array is ;)

[ Voor 13% gewijzigd door crisp op 25-11-2005 15:43 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

crisp schreef op vrijdag 25 november 2005 @ 15:39:
Als je nou een string zou hebben met enkel de indices komma-seperated dan zou je zoiets kunnen doen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$testarray = array();
$testarray[1] = array('red', 'green', 'orange');
$testarray[2] = array('yellow', 'green', 'red');
$testarray[3] = array('green', 'blue', 'orange');

$arrays = '1,2,3';
$arrays = explode(',', $arrays);

$result_array = $testarray[current($arrays)];
while (($index = next($arrays)) !== false)
{
    $result_array = array_intersect($result_array, $testarray[$index]);
}

print_r($result_array);
Kan dat niet makkelijker??


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$testarray = array();
$testarray[1] = array('red', 'green', 'orange');
$testarray[2] = array('yellow', 'green', 'red');
$testarray[3] = array('green', 'blue', 'orange');

$result_array = first($testarray);
while ($array = next($testarray) != null)
{
    $result_array = array_intersect($result_array, $array);
}

print_r($result_array);

Dus die gegenereerde string is volgens mij niet nodig... Weet niet waar de ts die voor gegenereerd heeft, misschien als selectie van een grote array, d.w.z. dat bv. die string "1,3" is.

[ Voor 19% gewijzigd door Verwijderd op 25-11-2005 15:45 ]


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Als ik het goed begrijp, is het probleem van de TS het volgende; Op de plaats van de ... wil hij een x aantal array's plaatsen, dit kunnen 2 array's zijn, maar ook 5.

En aangezien array_intersect() alle array's comma-gescheiden aangeleverd wil hebben is dat een probleem. Hoe geeft je array_intersect() een x aantal array's mee, waarbij je vooraf niet weet hoeveel het er zijn.

De oplossing weet ik overgens niet. :)

-- edit --

Ah, volgens mij staan hier boven al 2 oplossingen.

[ Voor 11% gewijzigd door OkkE op 25-11-2005 15:46 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

MEt eval is wel de meest ranzige oplossing imho. Zo lastig is het toch niet om een nieuwe functie 'array_intersect2D(Array)' te schrijven die iets doet als:

zet eerste array in resultaat
ga alle volgende arrays af en intersect resultaat met array uit lijst
geef result terug

EDIT: Hmm, wat Boland en crisp zeggen dus

[ Voor 8% gewijzigd door Janoz op 25-11-2005 15:46 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op vrijdag 25 november 2005 @ 15:44:
[...]

Kan dat niet makkelijker??


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$testarray = array();
$testarray[1] = array('red', 'green', 'orange');
$testarray[2] = array('yellow', 'green', 'red');
$testarray[3] = array('green', 'blue', 'orange');

$result_array = first($testarray);
while ($array = next($testarray) != null)
{
    $result_array = array_intersect($result_array, $array);
}

print_r($result_array);
euh, het ging er om dat er een string is die aangeeft welke elementen in de intersect moeten worden meegenomen. In mijn code kan $string dus ook '1,3' of '1,2' enzo bevatten...

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

crisp schreef op vrijdag 25 november 2005 @ 15:46:
[...]


euh, het ging er om dat er een string is die aangeeft welke elementen in de intersect moeten worden meegenomen. In mijn code kan $string dus ook '1,3' of '1,2' enzo bevatten...
Ja, dat had ik erbij ge-edit :) Ik ga er maar vanuit dat die string een selectie maakt uit die multidimensionale array, de informatie van de TS is nogal summier... :X

[ Voor 5% gewijzigd door Verwijderd op 25-11-2005 15:48 ]


Acties:
  • 0 Henk 'm!

  • Ebayzo
  • Registratie: Juli 2001
  • Laatst online: 17-10-2022
crisp schreef op vrijdag 25 november 2005 @ 15:46:
[...]


euh, het ging er om dat er een string is die aangeeft welke elementen in de intersect moeten worden meegenomen. In mijn code kan $string dus ook '1,3' of '1,2' enzo bevatten...
Nou hier ga ik van het weekend eens naar kijken dan. Bedankt in iedergeval...

Okke heeft me door :> maar Janoz ook :)

[ Voor 14% gewijzigd door Ebayzo op 25-11-2005 15:51 ]

Default blanke hetero


Acties:
  • 0 Henk 'm!

Verwijderd

Maar had ik gelijk m.b.t. die string? Je hebt bv. een multidimensionale array met 10 arrays en de gegenereerde string moet hier een selectie uit maken?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

@crisp: Ik denk dat je door het 'gegenereerde string' op het verkeerde been gezet wordt, maar ik kan het natuurlijk mis hebben natuurlijk.

@Okke: Nee, dat is niet het probleem. TS heeft een berg arrays en moet een array krijgen met daarin alle elementen die in al die arrays voorkomen. Dat is het probleem. Wat jij beschrijft is een dood punt waar je op uitkomt doordat je een verkeerd oplossingpad gekozen hebt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Ebayzo
  • Registratie: Juli 2001
  • Laatst online: 17-10-2022
Verwijderd schreef op vrijdag 25 november 2005 @ 15:49:
Maar had ik gelijk m.b.t. die string? Je hebt bv. een multidimensionale array met 10 arrays en de gegenereerde string moet hier een selectie uit maken?
Jep..maar hij moet dan dus door alle 10 de arrays heen.

Default blanke hetero


Acties:
  • 0 Henk 'm!

Verwijderd

Ebayzo schreef op vrijdag 25 november 2005 @ 15:50:
[...]
Jep..maar hij moet dan dus door alle 10 de arrays heen.
Dan had ik dus niet gelijk... Dan kun je gewoon mijn stukje code gebruiken en is die gegenereerde string nergens voor nodig. Waar dient die string anders voor??

Acties:
  • 0 Henk 'm!

  • Ebayzo
  • Registratie: Juli 2001
  • Laatst online: 17-10-2022
Ik weet het ook allemaal niet meer heur :z Van het weekend nog een poging :)

Default blanke hetero


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
@TS: Geef eens een voorbeeld van hoe de input eruit kan zien en wat je dan graag als output wilt. Dus wat voor gegevens je mee begint en waarmee je na deze handelingen mee wilt eindigen. Het is allemaal zo vaag dat het helemaal nergens op uit loopt. Volgens mij probeer je iets echt enorm omslachtig te doen terwijl het een stuk simpeler kan. Mischien is dit stukje niet eens het punt waarop je moet verbeteren, maar eerder een gedeelte ervoor, heb ik het idee.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Ebayzo
  • Registratie: Juli 2001
  • Laatst online: 17-10-2022
Michali schreef op vrijdag 25 november 2005 @ 19:13:
@TS: Geef eens een voorbeeld van hoe de input eruit kan zien en wat je dan graag als output wilt. Dus wat voor gegevens je mee begint en waarmee je na deze handelingen mee wilt eindigen. Het is allemaal zo vaag dat het helemaal nergens op uit loopt. Volgens mij probeer je iets echt enorm omslachtig te doen terwijl het een stuk simpeler kan. Mischien is dit stukje niet eens het punt waarop je moet verbeteren, maar eerder een gedeelte ervoor, heb ik het idee.
Ja ben inderdaad al van plan om het hele idee te herzien :) Toch bedankt voor je input.

Default blanke hetero

Pagina: 1