Ankündigung

Einklappen
Keine Ankündigung bisher.

php schreibt kein array ins array sondern string

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • php schreibt kein array ins array sondern string

    Nach der verwirrenden Überschrift mal die erläuterung:

    $array1
    ist ein array wie z.B.
    PHP-Code:
    print_r($this->array1);
    Array
    (
        [
    0] => index.html
        
    [1] => index1.html
        
    [2] => index2.html

    so dann bastel ich mit
    PHP-Code:
    $this->array1[1]['weitereseiten'] = $this->functionAufruf();

    print_r($this->functionAufruf()); 
    sagt uns z.B. auch
    PHP-Code:
    Array
    (
        [
    0] => index.html
        
    [1] => index1.html
        
    [2] => index2.html

    das $this->array1 soll dann so aussehen

    PHP-Code:
    Array
    (
        [
    0] => index.html
           
    ['weitereseiten'
                            [
    0] => index.html
                            
    [1] => index1.html
                            
    [2] => index2.html

        
    [1] => index1.html
           
    ['weitereseiten'
                            [
    0] => index.html
                            
    [1] => index1.html
                            
    [2] => index2.html

        
    [2] => index2.html
           
    ['weitereseiten'
                            [
    0] => index.html
                            
    [1] => index1.html
                            
    [2] => index2.html


    es steht aber:

    PHP-Code:
    Array
    (
        [
    0] => Andex.html
        
    [1] => Andex1.html
        
    [2] => Andex2.html

    also im Original bei mir stehen A weil er das A von Array nimmt so als würde er eine print ausgabe dem array1 geben und nicht eine print_r

    habt Ihr da ne Idee? Ich verwende das ganze Übrigens in eienr Klasse, siehtm an ja an $this ...


  • #2
    Naja das ist ja auch logisch! Das hier:

    PHP-Code:
    Array
    (
        [
    0] => index.html
           
    ['weitereseiten'
                            [
    0] => index.html
                            
    [1] => index1.html
                            
    [2] => index2.html

        
    [1] => index1.html
           
    ['weitereseiten'
                            [
    0] => index.html
                            
    [1] => index1.html
                            
    [2] => index2.html

        
    [2] => index2.html
           
    ['weitereseiten'
                            [
    0] => index.html
                            
    [1] => index1.html
                            
    [2] => index2.html


    ist ja auch keine Array-Struktur oder hast du sowas schonmal gesehen?

    würdest du vor deiner zuweisung mit dem 2ten Array ein echo $array1[1]; machen würde er dir ja auch einen String ausgeben. Du musst dich schon entscheiden ob du an $array1[1] jetzt nen String oder nen Array haben willst, es geht schließlich nur eins von beidem.

    Kommentar


    • #3
      Zitat von fragnicht Beitrag anzeigen
      also im Original bei mir stehen A weil er das A von Array nimmt so als würde er eine print ausgabe dem array1 geben und nicht eine print_r
      Nicht ganz. Die Indexzuweisung [..] kann analog zur {..} Syntax für Strings auch verwendet werden, um auf einzelne Buchstaben zuzugreifen. Und da es wie gesagt dieses gewünschte Konstrukt nicht gibt, überschreibst Du den alten Schlüssel, allerdings nur an Position 1. Da als Character nur ein String funktioniert wird eine impizite Typumwandlung Array > String vorgenommen.
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Zitat von nikosch77-new Beitrag anzeigen
        Nicht ganz. Die Indexzuweisung [..] kann analog zur {..} Syntax für Strings auch verwendet werden, um auf einzelne Buchstaben zuzugreifen. Und da es wie gesagt dieses gewünschte Konstrukt nicht gibt, überschreibst Du den alten Schlüssel, allerdings nur an Position 1. Da als Character nur ein String funktioniert wird eine impizite Typumwandlung Array > String vorgenommen.
        Laut deiner Aussage und dem hier:

        PHP-Code:
        $this->array1[1]['weitereseiten'] = $this->functionAufruf(); 

        müsste aber 'weitereseiten' == 0 sein, also eigentlich sollte es hier nen dicken Error geben

        Kommentar


        • #5
          Naja ich würde ja gern aus einer Dimension zwei Dimensionen machen.

          was ich benutze ob

          PHP-Code:
          $this->ar[1][0
          oder

          PHP-Code:
          $this->ar[1]['seiten'
          ist relativ den beides geht nicht. Habe dieses Problem noch nie gehabt.

          Einziger Error bzw. Notice ist :
          PHP-Code:
          Notice:  Array to string conversion in /var/www/piperweb/de/linknet/classes/class.domainspider.php on line 39 
          Oke verstehe ich schon... aber was wäre den eine Lösung?

          Kommentar


          • #6
            Zum Beispiel das:
            PHP-Code:

            // ersetzen: $this->array1[1]['weitereseiten'] = $this->functionAufruf();
            $this->array1[1] = array(
              
            'name' => $this->array1[1],
              
            'weitereseiten' => $this->functionAufruf()
            ); 

            Kommentar


            • #7
              Hihi. Ausprobiert. Es ist noch gewitzter. Da für PHP anscheinend nur die Character-Zugriff Syntax in Frage kommt, erfolgt noch eine Zweite Typumwandlung - 'weitereseiten' wird in INT konvertiert. Vgl.:
              PHP-Code:
              <?
              error_reporting (E_ALL  | E_STRICT);

              $in = array ('abc' , 'cde');
              $in[0]['test'] = '*';
              $in[0]['2est'] = '*';

              print_r($in);

              // Array ( [0] => ab* [1] => cde )
              (INT) 'test' ist 0, weil kein numerisches Zeichen zu Begin
              (INT) '2est' ist 2, weil 2 zu Begin
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                Zitat von nikosch77-new Beitrag anzeigen
                Hihi. Ausprobiert. Es ist noch gewitzter. Da für PHP anscheinend nur die Character-Zugriff Syntax in Frage kommt, erfolgt noch eine Zweite Typumwandlung - 'weitereseiten' wird in INT konvertiert. Vgl.:
                PHP-Code:
                <?
                error_reporting (E_ALL  | E_STRICT);

                $in = array ('abc' , 'cde');
                $in[0]['test'] = '*';
                $in[0]['2est'] = '*';

                print_r($in);

                // Array ( [0] => ab* [1] => cde )
                (INT) 'test' ist 0, weil kein numerisches Zeichen zu Begin
                (INT) '2est' ist 2, weil 2 zu Begin
                Die Theorie kann doch auch wieder nicht stimmen, dann würde dein Ergebnis doch *b* lauten und nicht ab* ???

                [edit]
                ausprobiert: die Theorie stimmt, aber du hast dich beim Ergebnis wohl verschrieben...

                Kommentar


                • #9
                  Zitat von cycap Beitrag anzeigen
                  Zum Beispiel das:
                  PHP-Code:

                  // ersetzen: $this->array1[1]['weitereseiten'] = $this->functionAufruf();
                  $this->array1[1] = array(
                    
                  'name' => $this->array1[1],
                    
                  'weitereseiten' => $this->functionAufruf()
                  ); 

                  Super jetzt funzt das
                  Ich danke euch!

                  Kommentar


                  • #10
                    Also PHP kann echt die tollesten Sachen so ist

                    PHP-Code:
                    if((int)'-21eh3zrt6' === -21
                    true und nichtmal ne Notice...

                    Kommentar


                    • #11
                      Die Theorie kann doch auch wieder nicht stimmen, dann würde dein Ergebnis doch *b* lauten und nicht ab* ???

                      [edit]
                      ausprobiert: die Theorie stimmt, aber du hast dich beim Ergebnis wohl verschrieben...
                      LOL. Absolut richtig natürlich. Hatte nur das Ergebnis der letzten ausprobierten Operation
                      PHP-Code:
                      $in[0]['2est'] = '*'
                      gepostet.

                      Nochmal der Vollständigkeit halber:

                      PHP-Code:
                      <pre><?
                      error_reporting (E_ALL  | E_STRICT);

                      $in = array ('abc' , 'cde' , 'fgh');

                      $in[0]['2est'] = '*'; // (INT) von '2est' ist 2
                      $in[1]['test'] = '*'; // (INT) von 'test' ist 0
                      $in[2][0]      = array ('a' , 'b'); // entspricht $in[2]{0} - Zugriff auf ersten Character
                                                          // Array wird zu String 'Array' - wirft Notice

                      print_r($in);
                      Code:
                      Notice:  Array to string conversion in I:\data\web\tst.php on line 8
                      
                      Array
                      (
                          [0] => ab*
                          [1] => *de
                          [2] => Agh
                      )
                      --

                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                      --

                      Kommentar

                      Lädt...
                      X