Marcel: array_fill löscht Array?

Guten Tag,

Ich hab ein zweidimensionales Array.
Wie folgt wurde es erstellt:

$F = array_fill(1, 10, array_fill(1, 10, $AngebotAlle));

nun möchte ich das, als beispiel, die eine Zeile in dem Array eine andere Variable bekommt, aber nur diese eine Reihe.
Ich hab es versucht es ebenfalls mit array_fill zu machen

Als Beispiel:
$F = array_fill(3, 1, array_fill(1, 10, $Angebot1));

Leider wird das erste Array dabei gelöscht.

Gibt es irgendeine Funktion, wie man nur eine Zeile in ein zweidimenionales Array füllt/schreibt/überschreibt ohne das man das Array löscht?
Oder hat noch jemand vorschläge wie ich die eine Zeile füllen kann?

  1. Hi,

    $F = array_fill(1, 10, array_fill(1, 10, $AngebotAlle));

    hier weist Du der Variable $F einen Wert zu,

    $F = array_fill(3, 1, array_fill(1, 10, $Angebot1));

    und hier überschreibst Du diesen Wert.

    Leider wird das erste Array dabei gelöscht.

    Wenn Du es so nennen möchtest: Ja. Das hat aber mit array_fill() nichts zu tun; der Vorgang ist exakt identisch mit diesem:

    $F = 'foo';
    $F = 'bar';

    Es existiert kein Grund anzunehmen, der Wert 'foo' sei nach der zweiten Zeile noch in irgend einer Form vorhanden.

    Gibt es irgendeine Funktion, wie man nur eine Zeile in ein zweidimenionales Array füllt/schreibt/überschreibt ohne das man das Array löscht?

    Auch die einzelnen Elemente eines Arrays können zugewiesen werden.

    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. $F = 'foo';
      $F = 'bar';

      Es existiert kein Grund anzunehmen, der Wert 'foo' sei nach der zweiten Zeile noch in irgend einer Form vorhanden.

      Aber das Array als Beispiel:
      $F[1][1] = 'Bla';
      $F[1][2] = 'Bla';
      $F[2][1] = 'Bla';
      $F[2][2] = 'Bla';

      $F[2][2] = 'Blubb';

      Die anderen Werte sind dann noch da lediglich das eine ist anders.
      Nur ein Teil wird überschrieben und genau das möchte ich bezwecken.

      Auch die einzelnen Elemente eines Arrays können zugewiesen werden.

      Cheatah

      Danke für die Antwort, das ist mir bewusst aber eine Funktion wäre mir lieber da sich die Größe des Arrays später ändert/ändern soll.
      Falls es keine andere Lösung gibt muss ich es so machen.

      1. Ich grüsse den Cosmos,

        Aber das Array als Beispiel:
        $F[1][1] = 'Bla';
        $F[1][2] = 'Bla';
        $F[2][1] = 'Bla';
        $F[2][2] = 'Bla';

        $F[2][2] = 'Blubb';

        Die anderen Werte sind dann noch da lediglich das eine ist anders.
        Nur ein Teil wird überschrieben und genau das möchte ich bezwecken.

        Das ist ein zweidimensionales Array. Su solltest dich mal entsheiden, denn im OP sprichts du von einem eindimensionalen Array.

        Danke für die Antwort, das ist mir bewusst aber eine Funktion wäre mir lieber da sich die Größe des Arrays später ändert/ändern soll.

        Ja und? Du kannst ein Array jederzit vergrössern, indem du werte anhängst und verkleinern, indem du die entsprechende Funktion nutzt. Ich seh dein problem nicht.

        Falls es keine andere Lösung gibt muss ich es so machen.

        Es gibt immer andere Lösungen, aber wieso du das nicht nutzen willst, was dafür gedacht ist, erschliest sich mir nicht.

        Möge das "Self" mit euch sein

        --
        Fragt ein Atom das andere: Hast du mein Elektron gesehen? Ich bin heute so positiv.
        ie:{ br:> fl:| va:| ls:& fo:{ rl:( n4:{ de:] ss:) ch:? js:| mo:) sh:( zu:)
        1. Das ist ein zweidimensionales Array. Su solltest dich mal entsheiden, denn im OP sprichts du von einem eindimensionalen Array.

          Ich schrieb zweidimensinales Array

          Ja und? Du kannst ein Array jederzit vergrössern, indem du werte anhängst und verkleinern, indem du die entsprechende Funktion nutzt. Ich seh dein problem nicht.

          Ich möchte einfach das ich eine Zeile, wie im Anfangspost erwähnt, mit etwas anderen überschreibe.

          Es gibt immer andere Lösungen, aber wieso du das nicht nutzen willst, was dafür gedacht ist, erschliest sich mir nicht.

          Was den zum Beispiel?

          1. Ich grüsse den Cosmos,

            Ich schrieb zweidimensinales Array

            $F = array_fill(1, 10, array_fill(1, 10, $AngebotAlle));

            Das ist ein _eindimensionales_ Array. Lediglich der dritte Wert ist ein Array (auch ein eindimensionales)

            Ich möchte einfach das ich eine Zeile, wie im Anfangspost erwähnt, mit etwas anderen überschreibe.

            Und wieso überschreibst du dann das gesammte Array und nicht nur den einen Wert?

            Was den zum Beispiel?

            $F[n] = "Neuer Wert";

            Wobei n für eine Zahl zwischen Null und der Anzahl der Werte im Array minus 1 ist. Also 0 für das erste Element, 1 für das Zweite usw.
            Im übrigen die erste Grundlage, die man in der Doku zu Arrays findet.

            Möge das "Self" mit euch sein

            --
            Fragt ein Atom das andere: Hast du mein Elektron gesehen? Ich bin heute so positiv.
            ie:{ br:> fl:| va:| ls:& fo:{ rl:( n4:{ de:] ss:) ch:? js:| mo:) sh:( zu:)
            1. Das ist ein _eindimensionales_ Array. Lediglich der dritte Wert ist ein Array (auch ein eindimensionales)

              Bitte teste es erst mal nach, dies ist ein zweidimensionales Array.

              Und wieso überschreibst du dann das gesammte Array und nicht nur den einen Wert?

              Es sind mehrere Werte, eine ganze Zeile, ich möchte nicht 10 mal
              $F[1][3] = 'blubb'; schreiben
              $F[2][3] = 'blubb';
              $F[3][3] = 'blubb';
              $F[4][3] = 'blubb';
              ....
              Ich könnte zwar eine Schleife machen aber trozdem empfände ich es nicht als passende Lösung.

              1. echo $begrüßung;

                Das ist ein _eindimensionales_ Array. Lediglich der dritte Wert ist ein Array (auch ein eindimensionales)
                Bitte teste es erst mal nach, dies ist ein zweidimensionales Array.

                Ein mehrdimensionales Array unter PHP ist eine Idealvorstellung aber nicht wirklich existent. PHP kennt nur einfache Arrays, deren Elemente aber auch komplexen Typs sein können. In einem Array können also skalare Werte neben Objekten und weiteren Arrays liegen. Man sollte eher von einer Baumstruktur als von X-Dimensionalität ausgehen. Die Verschachtlung kann pro Zweig beliebig tief sein. Du kannst dir zwar den Baum rechteckig schneiden, doch PHP kann nicht davon ausgehen, dass alle Bäume so aussehen, so dass es im Wesentlichen nur Funktionen zur Verfügung stellt, die sich auf ein einzelnes gradliniges Array beziehen.

                Es sind mehrere Werte, eine ganze Zeile, ich möchte nicht 10 mal
                $F[1][3] = 'blubb'; schreiben
                $F[2][3] = 'blubb';
                $F[3][3] = 'blubb';
                $F[4][3] = 'blubb';
                ....
                Ich könnte zwar eine Schleife machen aber trozdem empfände ich es nicht als passende Lösung.

                Dir wird nicht viel anderes übrigbleiben. Eine andere Möglichkeit bietet PHP für deine spezielle Art Array nicht an.

                echo "$verabschiedung $name";

                1. Ein mehrdimensionales Array unter PHP ist eine Idealvorstellung aber nicht wirklich existent. PHP kennt nur einfache Arrays, deren Elemente aber auch komplexen Typs sein können. In einem Array können also skalare Werte neben Objekten und weiteren Arrays liegen. Man sollte eher von einer Baumstruktur als von X-Dimensionalität ausgehen. Die Verschachtlung kann pro Zweig beliebig tief sein. Du kannst dir zwar den Baum rechteckig schneiden, doch PHP kann nicht davon ausgehen, dass alle Bäume so aussehen, so dass es im Wesentlichen nur Funktionen zur Verfügung stellt, die sich auf ein einzelnes gradliniges Array beziehen.

                  Trozdem entsteht das, was Manuel B. als zweidimensionales Array ansah,
                  wenn man die Funktion aufruf von der er meinte das es ein eindimensionales hervorbringt.

                  Dir wird nicht viel anderes übrigbleiben. Eine andere Möglichkeit bietet PHP für deine spezielle Art Array nicht an.

                  Danke, dann muss ich das verwenden.

                  1. echo $begrüßung;

                    Trozdem entsteht das, was Manuel B. als zweidimensionales Array ansah,
                    wenn man die Funktion aufruf von der er meinte das es ein eindimensionales hervorbringt.

                    array_fill() erzeugt ein einfaches Array. Du erhältst ein "zeidimensionales" Array, weil du als Füllwert ein mit einem weiteren array_fill()-Aufruf erzeugtes Array angibst. PHP löst dieses Konstrukt von innen heraus auf. Zuerst erzeugt es ein Array mit dem "rechten" array_fill()-Aufruf. Dieses bekommt das "linke" array_fill() mit auf den Weg und erzeugt nun ein Array mit Elementen, die Kopien des übergebenen Arrays sind. Somit ergibt sich am Ende ein Array dessen Elemente (gleich aussehende) Arrays sind.

                    echo "$verabschiedung $name";

      2. Hi,

        $F[1][1] = 'Bla';
        $F[1][2] = 'Bla';
        $F[2][1] = 'Bla';
        $F[2][2] = 'Bla';
        $F[2][2] = 'Blubb';
        Nur ein Teil wird überschrieben

        nein, $F[2][2] wird vollständig überschrieben, nicht teilweise. Und ebenso wird in Deinem Code, den Du im Ausgangsposting nanntest, $F vollständig überschrieben, denn genau $F steht auf der linken Seite der Zuweisung.

        Auch die einzelnen Elemente eines Arrays können zugewiesen werden.
        Danke für die Antwort, das ist mir bewusst aber eine Funktion wäre mir lieber

        Dann schreibe Dir eine solche. Welches Problem hast Du dabei?

        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. nein, $F[2][2] wird vollständig überschrieben, nicht teilweise. Und ebenso wird in Deinem Code, den Du im Ausgangsposting nanntest, $F vollständig überschrieben, denn genau $F steht auf der linken Seite der Zuweisung.

          Genau das mein ich ja damit.
          $F[2][2] wird vollständig überschrieben aber der Rest des zweidimensionales Arrays nicht.
          Das array_fill das array löscht hab ich auch gemerkt, aber gibt es eine funktion die ein gebiet eines arrays überschreibt und nicht löscht?

          1. Hi,

            Genau das mein ich ja damit.

            nein, Du hast offenbar immer noch nicht verstanden.

            $F[2][2] wird vollständig überschrieben aber der Rest des zweidimensionales Arrays nicht.
            Das array_fill das array löscht

            array_fill löscht

            *** NICHT ***

            das Array. Was das Array löscht, ist

            *** DIE ZUWEISUNG ***

            und nichts anderes.

            gibt es eine funktion die ein gebiet eines arrays überschreibt und nicht löscht?

            In https://forum.selfhtml.org/?t=158001&m=1027656 kanntest Du die Antwort hierauf noch.

            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. In https://forum.selfhtml.org/?t=158001&m=1027656 kanntest Du die Antwort hierauf noch.

              Und ich schrieb auch das ich genau das nicht machen möchte, ich hab es nur gemacht um es zu veranschaulichen.

              1. Hi,

                In https://forum.selfhtml.org/?t=158001&m=1027656 kanntest Du die Antwort hierauf noch.
                Und ich schrieb auch das ich genau das nicht machen möchte,

                komisch, in allen anderen Artikeln schreibst Du, dass Du es möchtest. Statt einer Zuweisung eine Funktion zu fordern, die Du offenbar nicht selbst schreiben möchtest[1], bringt Dich wohlgemerkt nicht weiter.

                Cheatah

                [1] Erscheint ja auch ein bisschen umständlich - eine Funktion, die nur eine Zuweisung durchführt.

                --
                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. komisch, in allen anderen Artikeln schreibst Du, dass Du es möchtest.

                  Achja? Das hier ist von mir:

                  Es sind mehrere Werte, eine ganze Zeile, ich möchte nicht 10 mal
                  $F[1][3] = 'blubb'; schreiben
                  $F[2][3] = 'blubb';
                  $F[3][3] = 'blubb';
                  $F[4][3] = 'blubb';
                  ....
                  Ich könnte zwar eine Schleife machen aber trozdem empfände ich es nicht als passende Lösung.

                  Tue ich? Nein. Ich hab ganz deutlich geschrieben das ich es SO nicht machen möchte sondern anders.

                  Statt einer Zuweisung eine Funktion zu fordern, die Du offenbar nicht selbst schreiben möchtest[1], bringt Dich wohlgemerkt nicht weiter.

                  Ich fordere? Ich frage lediglich ob so eine exestiert.
                  Und selber schreiben?
                  Ich hätte lediglich die Idee es genau so zu machen wie ich es gerade nicht möchte.

                  1. Hi,

                    komisch, in allen anderen Artikeln schreibst Du, dass Du es möchtest.
                    Achja? Das hier ist von mir:

                    ich gratuliere Dir. Kurz davor schriebst Du noch:

                    | Ich möchte einfach das ich eine Zeile, wie im Anfangspost erwähnt, mit etwas anderen überschreibe.

                    Dies ist also Dein Wunsch, den Du schon im Anfangspost geäußert zu haben behauptest.

                    Ich könnte zwar eine Schleife machen aber trozdem empfände ich es nicht als passende Lösung.
                    Tue ich? Nein. Ich hab ganz deutlich geschrieben das ich es SO nicht machen möchte sondern anders.

                    Du hast ganz deutlich geschrieben, dass Du es nicht so machen möchtest, wie es Dir niemand vorgeschlagen hat. Diese Information ist allerdings uninteressant; genauso gut könntest Du lamentieren, dass Du keine Äpfel magst.

                    Statt einer Zuweisung eine Funktion zu fordern, die Du offenbar nicht selbst schreiben möchtest[1], bringt Dich wohlgemerkt nicht weiter.
                    Ich fordere? Ich frage lediglich ob so eine exestiert.

                    Und weigerst Dich, andere Lösungen zu akzeptieren, selbst wenn diese einfacher wären als eine Funktion.

                    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. Dies ist also Dein Wunsch, den Du schon im Anfangspost geäußert zu haben behauptest.

                      Lies bitte alles noch mal genau, ich schrieb was ich wollte und genau was ich nicht wollte.

                      genauso gut könntest Du lamentieren, dass Du keine Äpfel magst.

                      Ich gebe diese Informationen damit gerade keiner auf die Idee kommt mir "Äpfel" anzubieten.
                      Und um keine dummen diskussionen zu führen warum ich keine "Äpfel" esse

                      Und weigerst Dich, andere Lösungen zu akzeptieren, selbst wenn diese einfacher wären als eine Funktion.

                      Ich akzeptiere die Lösung doch, ungern aber da es keine anderen Lösungen gibt.

                      Und im übrigen:
                      Ein einfaches "Mir ist keine weitere Funktion oder Lösung" dazu wäre hilfreiches als die Diskussion hier im übrigen.
                      Du widersprichst dir selbst, ich hab das mit den Zuweißen gesagt, aber es sei unwichtig obwohl es zusätzliche Informationen enthält die du im Anfangspost "vermisst".
                      Entschuldige, aber was erhoffst du dir von dieser Diskussion?
                      Sag das nächste mal bitte einfach du kennst keine weiteren Funktionen dazu, warum wird dann hier diskutiert was ich möchte?
                      Und nein, garantiert nicht um mir zu helfen, schließlich ist es "nicht wichtig" ob ich es mit einer zuweisung mache oder nicht. Deine Worte, denk drüber nach.

                      Ich danke noch mal der Person die mir eine Antwort gab, das es nicht anders möglich ist.
                      Ich bin jetzt draussen, bitte denk drüber nach was ich schrieb.