cyrus: Multideminsionales Array in eine Dimension

Hay!

Ich denke, es wurde hier schon bestimmt oft diskutiert, aber ich komm einfach nicht weiter - vllt kann sich das mal jemand anschauen :-)

Also ich habe folgendes Array:

  
Array ( [1] => Array (  
					[0] => 2  
				)  
		[2] => Array (  
					[0] => 13  
				)  
		[10] => Array (  
					[0] => 35  
				)  
		[13] => Array (  
					[0] => 50  
				)  
		[11] => Array (  
					[0] => 37  
				)  
		[12] => Array (  
					[1] => 45  
					[4] => 41  
					[5] => 39  
					[6] => 43  
					[7] => 44  
					[8] => 48  
					[9] => 46  
				)  
		)  

nun möchte ich dieses wie folgt umwandeln:

  
Array ( [1] => 2  
		[2] => 13  
		[10] => 35  
		[13] => 50  
		[11] => 37  
		[12] => 45  
		[12] => 41  
		[12] => 39  
		[12] => 43  
		[12] => 44  
		[12] => 48  
		[12] => 46  
		)  

Hat jemand eine Idee, wie (wenns überhaupt geht) man das bewerkstelligen kann?

  1. Hi,

    nun möchte ich dieses wie folgt umwandeln:

    Array ( [...]
    [12] => 45
    [12] => 41
    [...]
    )

      
    dies ist nicht möglich. Ein Key kann nur ein einziges Mal vorkommen.  
      
    Cheatah  
    
    -- 
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|  
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html  
    X-Will-Answer-Email: No  
    X-Please-Search-Archive-First: Absolutely Yes
    
    1. Hi,

      nun möchte ich dieses wie folgt umwandeln:

      Array ( [...]
      [12] => 45
      [12] => 41
      [...]
      )

      
      >   
      > dies ist nicht möglich. Ein Key kann nur ein einziges Mal vorkommen.  
      >   
      > Cheatah  
      >   
        
      ... woher habe ich mir das nur gedacht? Ok, danke trotzdem!!!
      
  2. Ich denke, es wurde hier schon bestimmt oft diskutiert, aber ich komm einfach nicht weiter - vllt kann sich das mal jemand anschauen :-)

    Also ich habe folgendes Array:

    Array ( [1] => Array (
    [0] => 2
    )
    [2] => Array (
    [0] => 13
    )
    [10] => Array (
    [0] => 35
    )
    [13] => Array (
    [0] => 50
    )
    [11] => Array (
    [0] => 37
    )
    [12] => Array (
    [1] => 45
    [4] => 41
    [5] => 39
    [6] => 43
    [7] => 44
    [8] => 48
    [9] => 46
    )
    )

    
    >   
    > nun möchte ich dieses wie folgt umwandeln:  
    >   
    > ~~~php
      
    
    > Array ( [1] => 2  
    > 		[2] => 13  
    > 		[10] => 35  
    > 		[13] => 50  
    > 		[11] => 37  
    > 		[12] => 45  
    > 		[12] => 41  
    > 		[12] => 39  
    > 		[12] => 43  
    > 		[12] => 44  
    > 		[12] => 48  
    > 		[12] => 46  
    > 		)  
    > 
    
    

    Hat jemand eine Idee, wie (wenns überhaupt geht) man das bewerkstelligen kann?

    Ich habe zwar keine Ahnung von PHP, aber ich denke, dass assoziative Arrays auch dort einmalige Schlüssel bzw Indizes haben müssen.
    Oder anders gefragt, was erwartest du wenn du schreibst $arrayvar[12] ?

    Wenn dir aber die bestehenden Indizes unwichtig sind, aber du die Sortierung gemäss Indizes behalten willst, bist du beraten, durch Iteration über den bestehenden Array die Werte in einen neuen Array zu kopieren.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
  3. Hi,

      [2] => 13  
      [10] => 35  
      [13] => 50  
      [11] => 37  
      [12] => 45  
      [12] => 41  
      [12] => 39  
      [12] => 43  
      [12] => 44  
      [12] => 48  
      [12] => 46  
    

    Das geht nicht. Die Schlüssel "12" würden sich immer überschreiben, so dass Du am Ende...

    [2] => 13
        [10] => 35
        [13] => 50
        [11] => 37
        [12] => 46

    ... übrig hättest.

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
  4. Array ( [1] => 2
    [2] => 13
    [10] => 35
    [13] => 50
    [11] => 37
    [12] => 45
    [12] => 41
    [12] => 39
    [12] => 43
    [12] => 44
    [12] => 48
    [12] => 46
    )

      
    Vorschlag:  
    ~~~php
      
    Array (  
    	['1_0'] => 2  
    	['2_0'] => 13  
    	['10_0'] => 35  
    	['13_0'] => 50  
    	['11_0'] => 37  
    	['12_0'] => 45  
    	['12_0'] => 41  
    	['12_1'] => 39  
    	['12_2'] => 43  
    	['12_3'] => 44  
    	['12_4'] => 48  
    	['12_5'] => 46  
    	)  
    
    
  5. Hello,

    nun möchte ich dieses wie folgt umwandeln:

    Array ( [1] => 2
    [2] => 13
    [10] => 35
    [13] => 50
    [11] => 37

    ab hier wir es spätestens suspekt :-)

      [12] => 45  
      [12] => 41  
      [12] => 39  
      [12] => 43  
      [12] => 44  
      [12] => 48  
      [12] => 46  
      )  
    
      
    aber  
      
     		["12.1"] => 45  
     		["12.4"] => 41  
     		["12.5"] => 39  
     		["12.6"] => 43  
     		["12.7"] => 44  
     		["12.8"] => 48  
     		["12.9"] => 46  
      
    ginge.  
      
    siehe "Array linearisieren":  
    <http://forum.de.selfhtml.org/archiv/2010/1/t193994/#m1296522>  
    <http://forum.de.selfhtml.org/archiv/2009/5/t187309/#m1244872>  
      
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
     ☻\_  
    /▌  
    / \ Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>
    
    1. aber
      ["12.1"] => 45
      ["12.4"] => 41
      ["12.5"] => 39
      ["12.6"] => 43
      ["12.7"] => 44
      ["12.8"] => 48
      ["12.9"] => 46
      ginge.

      ist der index von
        ["12.11"] => 45
      grösser oder kleiner als der index von
        ["12.2"] => 45

      mfg Beat

      --
      ><o(((°>           ><o(((°>
         <°)))o><                     ><o(((°>o
      Der Valigator leibt diese Fische
      1. Hello,

        ist der index von
          ["12.11"] => 45
        grösser oder kleiner als der index von
          ["12.2"] => 45

        Was ist denn bei Deinem Versuch herausgekommen?
        Wie werden denn Literale in PHP auf Größe/Reihenfolge verglichen?
        Warum findet hier keine Typumwandlung statt?

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hi,

          ist der index von
            ["12.11"] => 45
          grösser oder kleiner als der index von
            ["12.2"] => 45

          Was ist denn bei Deinem Versuch herausgekommen?

          var_dump('12.11' > '12.2');  
          var_dump('12.11' < '12.2');  
          // ergibt:  
          bool(false)  
          bool(true)
          

          Wie werden denn Literale in PHP auf Größe/Reihenfolge verglichen?

          Offenbar so: „When both strings can be converted to the numerics (in ("$a" > "$b") test) then resulted numerics are used, else FULL strings are compared char-by-char”

          Warum findet hier keine Typumwandlung statt?

          Findet offenbar sehr wohl.

          $x = array (  
            '12.11' => 'a',  
            '12.2' => 'b',  
            '9.45' => 'c',  
            '17.003' => 'd'  
          );  
          ksort($x);  
          print_r($x);  
            
          // resultiert in:  
          array(4) {  
            ["9.45"]=>  
            string(1) "c"  
            ["12.11"]=>  
            string(1) "a"  
            ["12.2"]=>  
            string(1) "b"  
            ["17.003"]=>  
            string(1) "d"  
          }
          

          Das Manual verweißt bzgl. ksort auf die bei sort beschriebenen sort_flags;
          allerdings wird auch bei ksort als Default SORT_REGULAR angegeben, „compare items normally (don't change types)” - obwohl offenbar *kein* richtiger String-Vergleich durchgeführt, sondern die aus obigem Nutzerkommentar zitierte Magie kommt auch hier zur Anwendung. Und dagegen wehren kann man sich wohl auch nicht, denn auch die explizite Angabe von SORT_REGULAR liefert das genannte Ergebnis - d.h., Sortierung von Keys nach deren Stringwerten lässt sich damit gar nicht erreichen.

          MfG ChrisB

          --
          “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
          1. Hello,

            Warum findet hier keine Typumwandlung statt?

            Findet offenbar sehr wohl.

            *ups*, das ist aber nicht das beschriebene Verhalten. Nur Keys mit ganzzahligen Werten dürften umgewandelt werden in Zahlen.

            $x = array (

            '12.11' => 'a',
              '12.2' => 'b',
              '9.45' => 'c',
              '17.003' => 'd'
            );
            ksort($x);
            print_r($x);

            // resultiert in:
            array(4) {
              ["9.45"]=>
              string(1) "c"
              ["12.11"]=>
              string(1) "a"
              ["12.2"]=>
              string(1) "b"
              ["17.003"]=>
              string(1) "d"
            }

            
            >   
              
              
            ~~~php
              
            <?php   ### sortkeys.php ###  
               $_x = array (  
               '12.11'  => 'a',  
               '12.2'   => 'b',  
               '9.45'   => 'c',  
               '17.003' => 'd');  
              
                ksort($_x, SORT_STRING);  
              
                echo "<pre>\r\n";  
                echo htmlspecialchars(print_r($_x,1));  
                echo "</pre>\r\n";  
            ?>  
            
            

            resultiert in:

            Array
            (
                [12.11] => a
                [12.2] => b
                [17.003] => d
                [9.45] => c
            )

            Wenn man also gezielt eine Sortierung als String anfordert, funktioniert es noch.

            Gut, dass wir mal darüber gesprochen haben :-)

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de