Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [array] z array(x, x, x) do $arr[x][x][x] = $val;
Forum PHP.pl > Forum > PHP
bim2
Z tablicy:
Cytat
Array ( [0] => imie [1] => pierwsze [2] => hehe )

potrzebuje zrobić:
  1. <?php
  2. (
  3.  [imie] => Array
  4. (
  5.  [pierwsze] => Array
  6. (
  7.  [hehe] => 'cos'
  8.  
  9. )
  10.  
  11. )
  12.  
  13. )
  14. ?>

Nie mogę sobie poradzić. Kod jaki mam nie nadaje się do pokazania, no ale cóż:
  1. <?php
  2. $sData = '';
  3. foreach($aArr as $iKey => $sParameter)
  4. {
  5. $sData .= '[''.$sParameter.'']';
  6. }
  7.  
  8. eval('$this->aData'.$sData.'[''.$sWhat.''] = ''.$sOn.'';');
  9. ?>

Czysto teoretycznie to działa, ale nie chce używać evala. Czuje, że da się zrobić to prościej, ale coś dziś przymróżony jestem. ;/

EDIT: Poprawiłem wcięcia tylko, nic nie zmieniałem. Więc nie ma co :|
Grzyw
  1. <?php
  2. $array = array('pierwsze','drugie','hehe');
  3.  
  4. foreach ($array as $key => $element)
  5. {
  6. $newArray[$element] = array();
  7. }
  8. ?>

No i możesz wsadzać co chcesz do nowej tablicy.
bim2
jak coś dajesz to sprawdź, to wywala:
Cytat
Array
(
[pierwsze] => Array
(
)

[drugie] => Array
(
)

[hehe] => Array
(
)

)
a nei to o co mi chodziło w 1 poście.
Grzyw
No, jak będziesz pierwszy post edytował, to nie ma co....
bim2
Ehhh... było się przyjrzeć. Wcięcia się nie dały i tyle. Jakbyś jakimś edytorkiem zaznaczył ( to byś się domyślił, ale poczęści to moja wina, że nie sformatowałem tego porządnie.

Ma ktoś jakieś pomysły?
nevt
ja nie eval() to może rekurencyjnie?
  1. <?php
  2. function newArray($x, $pos = 0)
  3. {
  4. if($pos + 1 == count($x))
  5. return $x[$pos];
  6. else
  7. return array($x[$pos] => newArray($x, $pos + 1));
  8. }
  9.  
  10. $x = array('imie', 'pierwsze', 'hehe', 'cos' );
  11. print_r($x);
  12.  
  13. $x = newArray($x);
  14. print_r($x);
  15. ?>
bim2
Prawie pomogłes, bo własnie kumpel mi pokazał jak bez rekurencji:
  1. <?php
  2. $arr = array( "imie", "nazwisko", "el1", "el2" );
  3. $out = array();
  4. $to =& $out;
  5. $count = count($arr)-1;
  6. foreach($arr as $i => $val) {
  7. $to[$val] = ($count==$i)?array('huehue'):array();
  8. $to =& $to[$val];
  9. }
  10. print_r($out);
  11. ?>

ale rozwiązałes biggrin.gif Dzięki.
em1X
Zadziała na dowolnej głębokości tablicy:

  1. <?php
  2. function & convert($array, $value)
  3. {
  4. $new = array();
  5.  
  6. for ($i=0; $i
  7. {
  8. $data = each($array);
  9. $klucz = $data[1];
  10.  
  11. if ($i == 0)
  12. {
  13. $new[$klucz] = array();
  14. $next =& $new[$klucz];
  15. }
  16. else
  17. {
  18. if ($i == count($array) - 1)
  19. {
  20. $next[$klucz] = $value;
  21. return $new;
  22. }
  23. else
  24. {
  25. $next[$klucz] = array();
  26. $next =& $next[$klucz];
  27. }
  28. }
  29. }
  30. }
  31. ?>


przykład:
  1. <?php
  2. $array = array("imie", "pierwsze", "hehe");
  3. $new = convert($array, 'cos');
  4.  
  5. print "<pre>";
  6. print_r($new);
  7. ?>


wynik:
Kod
Array
(
    [imie] => Array
        (
            [pierwsze] => Array
                (
                    [hehe] => value
                )
        )
)
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.