Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] jak zwrócić nazwę zmiennej
Forum PHP.pl > Forum > Przedszkole
kyob
$var = "abc'

jakim polecenim moge zwrocic nazwe zmiennej $var, aby wyniku otrzymac 'var'
dr_bonzo
http://www.php.net/language.variables.variable
devnul
@dr_bonzo: nie wiem po co odsyłasz do manuala - skoro tam tego nie znajdzie - odpowiedz jest jedna - nie da się
bili.pl
Nie ma bezpośredniego sposobu, ale być może da się jakoś to zrobić. Napisz coś więcej, skąd masz to $var. Ta zmenna pochodzi z jakiegoś nieznanego na etapie programowania kodu wykonywanego np. eval'em?
Michal2000
W php o ile się nie mylę, jest dostępna tablica wszystkich zmiennych, i można za pomocą array_search to sprawdzić, ale nie pamiętam czy taka tablica też istniała do wszystkich zmiennych czy tylko $_GET, $_POST, $_FILE, $_SERVER, $_COOKIE, $_REQUIRE i jeszcze jakies tam.

O już pamiętam, w $GLOBALS były wszystkie zmienne. Wiec DA SIĘ.

Czyli kod wyglądał by tak:

  1. <?php
  2. $NAZWA_ZMIENNEJ = array_search('WARTOSC_ZMIENNEJ', $GLOBALS);
  3. ?>
devnul
nie ma tablicy ze wszystkimi zmiennymi - jest tablica $GLOBALS w której są zmienne globalne przechowywane - ale to też nie jest sposób na wyciągniecie nazwy zmiennej - bo niby jak?
Michal2000
Cytat(devnul @ 26.03.2007, 17:25:04 ) *
nie ma tablicy ze wszystkimi zmiennymi - jest tablica $GLOBALS w której są zmienne globalne przechowywane - ale to też nie jest sposób na wyciągniecie nazwy zmiennej - bo niby jak?

Jest tablica ze wszystkimi zmiennymi.
W $GLOBALS sa przechowywane wszystkie zmienne, nie tylko globalne, nazwa ta wzięła sie z tond, ze dostęp do tej tablicy można uzyskać wszędzie, bo tablica jest globalna.
devnul
  1. <?php
  2.  
  3. $var="test";
  4.  
  5. function asd(){
  6. $ala="ma kota";
  7. }
  8. asd();
  9. print_r($GLOBALS);
  10. ?>


znajdz w wyniku zmienną $ala a przyznam Ci racje

definicja z manuala
Cytat
$GLOBALS
Zawiera referencje do każdej ze zmiennych aktualnie dostępnych w zasięgu globalnym skryptu. Kluczami tablicy są nazwy zmiennych globalnych.
wolguy
@kyob: napisz coś więcej o swoim problemie, a na pewno znajdziemy rozwiązanie
empathon
  1. <?php
  2. $var = "nazwa";
  3. $nazwa = "tresc";
  4. echo $$var; // Daje => "tresc"
  5. ?>


O coś takiego Ci chodzi ?
Michal2000
Cytat(devnul @ 26.03.2007, 17:35:38 ) *
  1. <?php
  2.  
  3. $var="test";
  4.  
  5. function asd(){
  6. $ala="ma kota";
  7. }
  8. asd();
  9. print_r($GLOBALS);
  10. ?>


znajdz w wyniku zmienną $ala a przyznam Ci racje

definicja z manuala


Masz racje, faktycznie głupio to napisałem, zapomniałem pomyślec drugi raz smile.gif Ale mimo wszystko raczej trudno zeby tam była zmienna lokalna smile.gif
Źle sobie z innym językiem skojarzyłem w którym domyślne każda zmienna jest lokalna a globalne to tylko te, poprzedzone słowem kluczowym GLOBAL, mój błąd smile.gif A w PHP domyślnie każda zmienna poza tymi w funkcjach i klasach... jest globalna.
devnul
@empathon: przeczytaj uważnie, kyob napisał wyraźnie
Cytat
$var = "abc'

jakim polecenim moge zwrocic nazwe zmiennej $var, aby wyniku otrzymac 'var'
że chce otrzymać nazwę zmiennej a nie jej wartość to o czym piszesz zasugerował dr_bonzo odsyłając do manuala.
Michal2000
No cóż, nadal uważam, że ten kod będzie działa tak, jak chcesz:

  1. <?php
  2. $var = 'KOTEK';
  3.  
  4. echo array_search('KOTEK', $GLOBALS);
  5. //ECHO wyświetla wartość var 
  6. ?>


Chyba że źle rozumiem twój problem.
devnul
  1. <?php
  2. $var_bad = 'KOTEK';
  3. $var = 'KOTEK';
  4.  
  5. echo array_search('KOTEK', $GLOBALS);
  6. //ECHO wyświetla wartość var 
  7. ?>


a teraz nie będzie działał - czyli Twój kod jest nieprzewidywalny - no i nie można go użyć wewnątrz funkcji

ale przyszła mi na myśl taka konstrukcja
  1. <?php
  2. $test="aaaaaa"; //zmienna której nazwe chcemy wyciągnąć
  3. $tmp=get_defined_vars();
  4. end($tmp);
  5. echo key($tmp);
  6. ?>

i działa równo z wnętrza jak i z zewnątrz funkcji - warunek jest taki że trzeba ten kod przeklejac w całości ilekroc chcemy wyciągnąć nazwe jakiejs zmiennej
empathon
Cytat(devnul @ 26.03.2007, 17:54:32 ) *
@empathon: przeczytaj uważnie, kyob napisał wyraźnie
że chce otrzymać nazwę zmiennej a nie jej wartość to o czym piszesz zasugerował dr_bonzo odsyłając do manuala.

Powiedz jaki jest sens poznania nazwy zmiennej której znamy nazwę?

No proszę bardzo...
  1. <?php
  2. $var = 'abc';
  3. $nazwa = preg_replace( "*.(w+)*", "1", '$var');
  4. echo $nazwa;
  5. ?>


ech... kod na phpfi http://phpfi.com/220149
Michal2000
Cytat
a teraz nie będzie działał - czyli Twój kod jest nieprzewidywalny - no i nie można go użyć wewnątrz funkcji


Cóż, to był tylko uproszczony przykład.
devnul
Cytat
Powiedz jaki jest sens poznania nazwy zmiennej której znamy nazwę?

@empathon: osobiście uznaje to za nieprzydatne - ale zawsze może to posłużyć do (hmmm...) debugowania kodu lub czort wie czego - nie ja zakładałem temat - więc nie mnie pytaj na co mi to

Cytat
Cóż, to był tylko uproszczony przykład.

@Michal2000: tego już nie napisałeś, a wręcz przeciwnie:
Cytat
nadal uważam, że ten kod będzie działa tak, jak chcesz


//ADD: @Michal2000: ok może troche sie czepiam - sory - już nie będe winksmiley.jpg
Michal2000
Cytat(devnul @ 26.03.2007, 18:19:40 ) *
@Michal2000: tego już nie napisałeś, a wręcz przeciwnie:

A nie działa? Poprawienie kodu, aby działał tak, jak ktoś chce to kwestia paru chwil, wiec przy czymś tak banalnym to nawet nie zwracałem uwagi na takie szczegóły, jak by był z tym problem, to można to obrazu poprawić. Czepiasz się słówek smile.gif
kyob
doprecyzuje pytanie na prostym przykladzie

  1. <?
  2. if(isset($_POST['Submit'])) {
  3. // tutaj to magiczne polecenie/funkcja, ktora zwroci nazwe zmiennej (nie wartosc)
  4. // przyklad: 
  5. // echo magiczne_polecenie($_POST['Traktor']); 
  6. // w wyniku chce otrzymac: Traktor
  7. }else{
  8. ?>
  9. <form method="post" action="index.php">
  10. <input name="Traktor" type="text" />
  11. <input type="submit" name="Submit"/>
  12. </form>
  13. <? } ?>
nospor
nie mozna bylo tak od razu?
http://pl.php.net/manual/pl/function.extract.php

ale jesli ci chodzi tylko o traktor, to nie czemu nie zrobisz tak:
  1. <?php
  2. $Traktor = $_POST['Traktor'];
  3. ?>

?
Michal2000
Cytat(nospor @ 27.03.2007, 14:23:31 ) *
nie mozna bylo tak od razu?
http://pl.php.net/manual/pl/function.extract.php

ale jesli ci chodzi tylko o traktor, to nie czemu nie zrobisz tak:
  1. <?php
  2. $Traktor = $_POST['Traktor'];
  3. ?>

?


nie o to mu chodzi, chce zwrocic nazwe elementu tablicy.

  1. <?php
  2. echo $TABLICA['element'] //zwraca element
  3. echo $_GET['cos'] // zwraca cos
  4. ?>


Ale pojecia nie mam, do czego takie cos moglo by sie przydac
devnul
tymbardziej ze nazwa jest jawnie używana
kyob
Cytat(Michal2000 @ 27.03.2007, 14:26:32 ) *
Ale pojecia nie mam, do czego takie cos moglo by sie przydac


  1. <?php
  2. $_POST['Kolor']='czerwony';
  3. echo magiczne_polcenie($_POST['Kolor']).' = '.$_POST['Kolor'];
  4. // oczekiwany wynik: "Kolor = czerwony"
  5. ?>
nospor
dalej nic nie wyjasniles, a czemu nie moze byc:
  1. <?php
  2. $_POST['Kolor']='czerwony';
  3. echo 'Kolor = '.$_POST['Kolor'];
  4. ?>

?

Przeciez ty index znasz
kyob
Cytat(nospor @ 27.03.2007, 14:43:24 ) *
dalej nic nie wyjasniles, a czemu nie moze byc:
  1. <?php
  2. $_POST['Kolor']='czerwony';
  3. echo 'Kolor = '.$_POST['Kolor'];
  4. ?>

...bo $_POST['nazwa_zmiennej_jest_tworzona_dynamicznie_i_nie_znam_jej']
devnul
  1. <?php
  2. foreach($_POST as $typ=>$val){
  3. echo $typ." = ".$val;
  4. }
  5. ?>
kyob
koniec tematu @devnul trafil w sedno smile.gif
dzieki za pomoc
ps: cholera, alez to bylo oczywiste :/
devnul
zastrzeliłeś mnie tym problemem a raczej sposobem o jaki Ci chodziło. Na przyszłość staraj się jaśniej przedstawić swój problem bo tak to sie niezły wątek z tego zrobił :|
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.