Timo: array_pad size negative

Hi,

ich wollte nur mal kurz wissen ob das Folgende in der Schreibweise ok ist?

$link_ar = array_pad($link_ar,-(count($link_ar)+1),'zurueck');

Es geht mir darum an ein vorhandenes Array von Links aus(bildlich gesehen), etwas hinzuzufügen, eben den Wert 'zurueck'

ich hätte natürlich auch so schreiben können:

$size = 0-count($link_ar)-1;
$link_ar = array_pad($link_ar,$size,'zurueck');

Reicht also ein kleines Minus Zeichen vor der Klammer(oder könnte ich mit anderen Systemumgebungen Probleme kriegen?) oder doch besser das 2. Beispiel?

Timo

  1. echo $begrüßung;

    ich wollte nur mal kurz wissen ob das Folgende in der Schreibweise ok ist?
    $link_ar = array_pad($link_ar,-(count($link_ar)+1),'zurueck');
    ich hätte natürlich auch so schreiben können:
    $size = 0-count($link_ar)-1;
    $link_ar = array_pad($link_ar,$size,'zurueck');

    Beides ist mathematisch und syntaktisch gesehen richtig ...

    Es geht mir darum an ein vorhandenes Array von Links aus(bildlich gesehen), etwas hinzuzufügen, eben den Wert 'zurueck'

    ... aber nicht das was du willst.

    array_pad() hängt nicht einfach etwas dran sondern füllt die Werte auf eine bestimmte vorgegebene Länge auf. count($link_ar) liefert dir die Anzahl der Elemente des Arrays. Je länger das Array, desto länger werden die aufgefüllten Elemente sein.

    array_map() oder array_walk() oder foreach wären zielführender.

    $link_ar = array_map(create_function('$element', 'return "zurueck" . $element;'), $link_ar);

    array_walk($link_ar, create_function('&$element, $key', '$element = "zurueck" . $element;'));

    foreach ($link_ar as &$element)  
      $element = "zurueck" . $element;
    

    oder PHP4:

    foreach ($link_ar as $key => $element)  
      $link_ar[$key] = "zurueck" . $element;
    

    echo "$verabschiedung $name";

    1. Hi,

      Beides ist mathematisch und syntaktisch gesehen richtig ...

      danke, gut zu wissen.

      »» Es geht mir darum an ein vorhandenes Array von Links aus(bildlich gesehen), etwas hinzuzufügen, eben den Wert 'zurueck'

      ... aber nicht das was du willst.

      Doch doch, das wollte ich so.

      foreach ($link_ar as $key => $element)

      $link_ar[$key] = "zurueck" . $element;

      
      >   
        
      Ich erweitere damit das $link\_ar um einen Key und um den Wert bei diesem Key. Es handelt sich um eine Linkliste, genauer Blätterfunktion, an die ich noch die Zurück- und VorButtons dadurch anhänge. Und das funktioniert auch perfekt, war halt nur nicht sicher ob die Schreibweise ok und verlässlich ist.  
        
      Danke  
      Timo  
        
        
        
        
      
      
      1. echo $begrüßung;

        Doch doch, das wollte ich so.
        Ich erweitere damit das $link_ar um einen Key und um den Wert bei diesem Key. Es handelt sich um eine Linkliste, genauer Blätterfunktion, an die ich noch die Zurück- und VorButtons dadurch anhänge. Und das funktioniert auch perfekt, war halt nur nicht sicher ob die Schreibweise ok und verlässlich ist.

        Moment mal, zum einen hab ich mich bei array_pad() geirrt. Ich nahm an, dass es die Elemente im Array auf eine Länge bringt, also quasi strpad() für jedes Array-Element ausführt. Und ich nahm an, dass du ein Wort vor jedes Element hinzufügen wolltest. Deinen Satz

        » » Es geht mir darum an ein vorhandenes Array von Links aus(bildlich gesehen), etwas hinzuzufügen, eben den Wert 'zurueck'

        hatte ich entsprechend missdeutet. Stattdessen möchtest du ein Element am Anfang des Arrays einfügen. Das geht einfacher mit array_unshift().

        echo "$verabschiedung $name";

        1. Hi,

          Das geht einfacher mit array_unshift().

          stimmt, müsste auch gehen. Gibt es dafür auch noch eine gegeteilige Funktion, denn ich muss ja auch rechts noch den Forward dran hängen.

          Oder muss ich da bei array_pad bleiben?

          $link_ar = array_pad($link_ar,(count($link_ar)+1),$lnk_forward);

          Gruss
          Timo

          1. Hi,

            stimmt, müsste auch gehen. Gibt es dafür auch noch eine gegeteilige Funktion, denn ich muss ja auch rechts noch den Forward dran hängen.

            habe es schon selbst gefunden: http://de.php.net/manual/de/function.array-push.php

            Weiss zwar nicht wie ich das jetzt testen sollte, aber ich gehe mal davon aus aus Performancesicht wäre array_unshift und array_push meiner array_pad variante vorzuzihen, richtig?

            Timo

            1. echo $begrüßung;

              habe es schon selbst gefunden: http://de.php.net/manual/de/function.array-push.php

              Statt array_push() solltest du, wenn du nur einen Wert anfügst, wie dort beschrieben,

              $array[] = ...

              verwenden.

              Weiss zwar nicht wie ich das jetzt testen sollte, aber ich gehe mal davon aus aus Performancesicht wäre array_unshift und array_push meiner array_pad variante vorzuzihen, richtig?

              Vermutlich dauert die array_pad()-Variante länger, schon weil du erst noch eine Rechnung ausfühen musst. Bei einer Anwendung im kleinen Maßstab geht eine mögliche Differenz aber im Grundrauschen unter. Schreibe so, dass man den Sinn dahinter versteht, das bringt deutlich mehr Vorteile beim Pflegen des Codes als man mit Mikrooptimierung in der Laufzeit einsparen kann. array_pad() für ein einzelnes geplantes Element zu verwenden, halte ich für "Missbrauch". Sein Sinn ist es, ein Array auf eine angegebene Anzahl von Elementen aufzufüllen, nicht, um eins anzufügen (egal ob vorn oder hinten).

              Eine in meinen Augen sinnvolle Anwendung wäre, wenn beispielsweise immer x Zellen in einer Tabellenzeile stehen sollen, aber von den einzufügenden Daten nur weniger als x Elemente übrigbleiben. Dann kann man damit für die fehlenden Elemente Leereinträge erstellen.

              echo "$verabschiedung $name";

              1. Hi,

                Statt array_push() solltest du, wenn du nur einen Wert anfügst, wie dort beschrieben,

                $array[] = ...

                Oh oh, nicht zu fassen, manchmal mache ich mir echt Alzheimer Sorgen, wenn man so dermaßen, und das passiert mir oft wenn ich mit einem Projekt intensiv beschäftigt bin, den Wald vor Bäumen nicht sieht. Klar, $array[]=

                Schreibe so, dass man den Sinn dahinter versteht, das bringt deutlich mehr Vorteile beim Pflegen des Codes als man mit Mikrooptimierung in der Laufzeit einsparen kann.

                Stimmt, sehe ich eigentlich auch so.

                Danke
                Timo