• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Leerer 3D Array

T4k3C4r3

Mitglied
Hallo Forum!

Könnte mir bitte jemand von euch den einfachen Syntax schreiben, um einen Leeren 3D Array zu bekommen ?

Danke

Mfg
 
Werbung:
PHP:
<?php

function createDimensionalArray(array $dimensionSizes)
{
    $dimensions = count($dimensionSizes);

    if ($dimensions === 0) {
        return array();
    }

    $rec = function ($dimPointer, $dimensionSizes) use (&$rec, $dimensions) {
        $dimSize = $dimensionSizes[$dimPointer];

        if (!is_int($dimSize) || $dimSize < 1) {
            throw new Exception('Dimension size must be int >= 1');
        }

        $a = array_fill(0, $dimSize, null);

        if ($dimPointer < $dimensions - 1) {
            foreach ($a as &$e) {
                $e = $rec($dimPointer + 1, $dimensionSizes);
            }
        }

        return $a;
    };

    $a = $rec(0, $dimensionSizes);

    return $a;
}

$dimensionSizes = array(3, 3, 3);

$a = createDimensionalArray($dimensionSizes);

var_dump($a);

ist nicht so einfach, dafür aber für n Dimensionen.

(Falls du das meintest.)
 
Werbung:
Verteilung von Minen in einem n-dimensionalen Minesweeper:

PHP:
<?php

function indexToDimPosition($index, array $dimensionSizes)
{
    $dims = count($dimensionSizes);
    $dimPosition = array_fill(0, $dims, 0);

    $dimFactors = array_fill(0, $dims, 0);
    $dimFactors[$dims - 1] = 1;

    for ($n = 0; $n < $dims - 1; $n++) {
        $dimFactors[$n] = array_product(array_slice($dimensionSizes, $n + 1));
    }

    for ($n = 0; $n < $dims; $n++) {
        $c = (int) floor($index / $dimFactors[$n]);
        $dimPosition[$n] = $c;
        $index -= $c * $dimFactors[$n];
    }

    return $dimPosition;
}

$dimensionSizes = array(3, 4, 3, 5, 2);
$fields = array_product($dimensionSizes);

$numberOfMines = 100;

if ($numberOfMines > $fields) {
    throw new Exception('Number of mines exceeds number of fields');
}

$fieldsNotPickedRepository = range(0, $fields - 1);
shuffle($fieldsNotPickedRepository);

echo 'Mine locations:', "\n";

$positions = array();

for ($i = 0; $i < $numberOfMines; $i++) {
    $index = array_pop($fieldsNotPickedRepository);
    $positions[] = '(' . implode(',', indexToDimPosition($index, $dimensionSizes)) . ')';
}

sort($positions);

echo implode("\n", $positions) . "\n";

Das wird aber ab spätestens vier Dimensionen schwierig darzustellen und ist auch eine echte spielerische Herausforderung.

Die Idee könnte sein:

Bei einem eindimensionalen Minesweeper („Linie“) hat jedes Nicht-Rand-Feld 2 Nachbarn.
Bei einem zweidimensionalen Minesweeper (kennt man) hat jedes Nicht-Rand-Feld 8 Nachbarn.
Bei einem dreidimensionalen Minesweeper („Quader“) hat jedes Nicht-Rand-Feld 26 Nachbarn.

Das sind dann für ein n-dimensionales Feld möglicherweise: 3^n-1 Nachbarn.

Wie das $fieldsNotPickedRepository zeigt, lässt sich ein n-dimensionales Feld „theoretisch“ auch eindimensional repräsentieren, indem einfach alle Felder durchnummeriert werden.

Das heißt, ein n-dimensionales Spielfeld könnte auf eine gewisse Weise auch ein- oder sicherlich auch zweidimensional oder m-dimensional dargestellt werden.

Ich habe aber keine Ahnung, ob das alles hier mathematisch auch nur den geringsten Sinn ergibt. :)
 
Zuletzt bearbeitet:
Ich bin mir auch nicht ganz sicher, deine Frage richtig verstanden zu haben. Meinen zweiten Post kannst du aber dazu ignorieren. Der ist nur Spielerei und hat nicht wirklich was mit dem Thema zu tun.

Ich habe es so gelesen, dass du ein Array erhalten möchtest, das etwa in x-, y- und z-Dimension eine gewisse Größe hat, sodass du auf Elemente in diesem Array in etwa so zugreifen kannst:

PHP:
$a[3][3][5] = 'was auch immer';

Das wäre dann das Element an x=3, y=3, z=5.
 
Werbung:
Das ist durchaus valider Code und ist strikt gesehen ein 3D-Array. Aber in PHP sind Arrays nunmal keine Arrays sondern Hashmaps, deswegen ist deine Frage etwas eigenartig. Sag doch einfach was du genau willst.
 
Das ist durchaus valider Code und ist strikt gesehen ein 3D-Array. Aber in PHP sind Arrays nunmal keine Arrays sondern Hashmaps, deswegen ist deine Frage etwas eigenartig. Sag doch einfach was du genau willst.

Das ganze soll die 3D Welt werden. Gezeichnet von Javascript. Gespeichert und verwaltet mit PHP.
 
Wenn JavaScript zur Darstellung dienen soll, brauchst Du eher ein JavaScript-Array als ein PHP-Array. PHP müsste den entsprechenden JavaScript-Code erzeugen, ggfs. aus einem eigenen Array-Konstrukt, aber nicht zwingend.
 
Werbung:
Zurück
Oben