Hoe declareer ik een tweedimensionale array?

Wat is de gemakkelijkste manier om een 2D-array te maken. Ik hoopte iets soortgelijks als dit te kunnen doen:

declare int d[0..m, 0..n]

Antwoord 1, autoriteit 100%

Je kunt ook een associatieve array maken, of een “hash-table”-achtige array, door de index van de array op te geven.

$array = array(
    0 => array(
        'name' => 'John Doe',
        'email' => '[email protected]'
    ),
    1 => array(
        'name' => 'Jane Doe',
        'email' => '[email protected]'
    ),
);

Wat gelijk is aan

$array = array();
$array[0] = array();
$array[0]['name'] = 'John Doe';
$array[0]['email'] = '[email protected]';
$array[1] = array();
$array[1]['name'] = 'Jane Doe';
$array[1]['email'] = '[email protected]';

Antwoord 2, autoriteit 80%

De volgende zijn equivalent en resulteren in een tweedimensionale array:

$array = array(
    array(0, 1, 2),
    array(3, 4, 5),
);

of

$array = array();
$array[] = array(0, 1, 2);
$array[] = array(3, 4, 5);

Antwoord 3, autoriteit 54%

Gewoon declareren? Dat hoeft niet. Zorg ervoor dat de variabele bestaat:

$d = array();

Arrays worden dynamisch verkleind en een poging om iets naar een niet-bestaand element te schrijven, creëert het (en maakt zo nodig een volledige array)

$d[1][2] = 3;

Dit is geldig voor een willekeurig aantal afmetingen zonder voorafgaande verklaringen.


Antwoord 4, autoriteit 32%

Ten eerste heeft PHP geen multidimensionale arrays, het heeft arrays van arrays.

Ten tweede kun je een functie schrijven die het doet:

function declare($m, $n, $value = 0) {
  return array_fill(0, $m, array_fill(0, $n, $value));
}

Antwoord 5, autoriteit 13%

Voor een eenvoudige, “vul als je gaat” soort oplossing:

$foo = array(array());

Hierdoor krijgt u een flexibele pseudo-tweedimensionale array die $foo[n][n] kan bevatten, waarbij n<= ∞ (natuurlijk wordt je beperkt door de gebruikelijke beperkingen van de geheugengrootte, maar je krijgt het idee dat ik hoop). Dit zou in theorie kunnen worden uitgebreid om zoveel subarrays te maken als je nodig hebt.


Antwoord 6, autoriteit 11%

Of voor grotere arrays, allemaal met dezelfde waarde:

$m_by_n_array = array_fill(0, $n, array_fill(0, $m, $value);

maakt een $mby $narray met alles ingesteld op $value.


Antwoord 7, autoriteit 4%

Voor zover ik weet is er geen ingebouwde php-functie om dit te doen, je moet het doen via een lus of via een aangepaste methode die recursief aanroept naar zoiets als array_fill aangegeven in het antwoord door @Amber;

Ik neem aan dat je bedoelt dat je een lege maar geïnitialiseerde array van arrays hebt gemaakt. U wilt bijvoorbeeld een eindresultaat zoals hieronder van een array van 3 arrays:

  $final_array = array(array(), array(), array());

Dit is eenvoudig om gewoon handcode te geven, maar voor een array van willekeurige grootte zoals een array van 3 arrays van 3 arraysbegint het ingewikkeld te worden om te initialiseren voordat het wordt gebruikt:

    $final_array = array(array(array(), array(), array()), array(array(), array(), array()), array(array(), array(), array()));

…etc…

Ik snap de frustratie. Het zou leuk zijn om een eenvoudige manier te hebben om een geïnitialiseerde array van arrays met elke gewenste diepte te declareren zonder te controleren of fouten te maken.


Antwoord 8, autoriteit 4%

Het antwoord van atli heeft me echt geholpen dit te begrijpen. Hier is een voorbeeld van het doorlopen van een tweedimensionale array. Dit voorbeeld laat zien hoe u waarden kunt vinden voor bekende namen van een array en ook een foreach waarbij u gewoon door alle velden gaat die u daar vindt. Ik hoop dat het iemand helpt.

$array = array(
    0 => array(
        'name' => 'John Doe',
        'email' => '[email protected]'
    ),
    1 => array(
        'name' => 'Jane Doe',
        'email' => '[email protected]'
    ),
);
foreach ( $array  as $groupid => $fields) {
    echo "hi element ". $groupid . "\n";
    echo ". name is ". $fields['name'] . "\n";
    echo ". email is ". $fields['email'] . "\n";
    $i = 0;
    foreach ($fields as $field) {
         echo ". field $i is ".$field . "\n";
        $i++;
    }
}

Uitgangen:

hi element 0
. name is John Doe
. email is [email protected]
. field 0 is John Doe
. field 1 is [email protected]
hi element 1
. name is Jane Doe
. email is [email protected]
. field 0 is Jane Doe
. field 1 is [email protected]

Antwoord 9, autoriteit 2%

En voor mij hangt het argument of een array mager moet zijn of niet af van de context.

Als $a[6][9] bijvoorbeeld niet is ingevuld, is het equivalent aan $a[6][9] gevuld met bijvoorbeeld “” of 0.


Antwoord 10, autoriteit 2%

$r = array("arr1","arr2");

om een enkel array-element te echoën, moet je schrijven:

echo $r[0];
echo $r[1];

uitvoer zou zijn: arr1 arr2


Antwoord 11, autoriteit 2%

En ik hou van deze manier:

$cars = array
  (
  array("Volvo",22),
  array("BMW",15),
  array("Saab",5),
  array("Land Rover",17)
  );

Antwoord 12

U kunt dit proberen, maar de waarden van de tweede dimensie zijn gelijk aan indexen:

$array = array_fill_keys(range(0,5), range(0,5));

een beetje ingewikkelder voor lege array:

$array = array_fill_keys(range(0, 5), array_fill_keys(range(0, 5), null));


Antwoord 13

Je moet een array declareren in een andere array.

$arr = array(array(content), array(content));

Voorbeeld:

$arr = array(array(1,2,3), array(4,5,6));

Om het eerste item uit de array te halen, gebruik je $arr[0][0], dat is hetzelfde als het eerste item uit de eerstearray uit de reeks.
$arr[1][0]retourneert het eerste item uit de tweedearray uit de array.

Other episodes