Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
<?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);
<?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";
Häh?
PHP:$array = [[[]]];
$a[3][3][5] = 'was auch immer';
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.