2017-10-14 4 views
0

Ich möchte ein mehrdimensionales Array mit bekannten möglichen Schlüsseln für die zweite Dimension erstellen und initialisieren, aber keine Werte.So initialisieren Sie ein mehrdimensionales assoziatives Array mit leeren Werten

Dieses Array speichert event_ids (dynamisch gefüllt) und für jedes event_id ein Array mit genau vier verschiedenen Zählwerten (auch dynamisch gefüllt).

Struktur Ich will

Array 
(
    [0] => Array =================> This index will be the event_id 
     (
      [invitation_not_sent_count] => 
      [no_response_yet_count] => 
      [will_not_attend_count] => 
      [will_attend_count] => 
     ) 
) 

schaffen, was ich bisher getan?

$DataArray = array(); 
$DataArray[] = array('invitation_not_sent_count' => '', 
             'no_response_yet_count' => '', 
             'will_not_attend_count' => '', 
             'will_attend_count' => ''); 

Und ich innerhalb der Schleifendaten am bevöl dynamisch mag:

$DataArray[$result->getId()]['no_response_yet_count'] = $NRCount; 

Was ich erhalte, ist:

Array 
(
[0] => Array 
    (
     [invitation_not_sent_count] => 
     [no_response_yet_count] => 
     [will_not_attend_count] => 
     [will_attend_count] => 
    ) 

[18569] => Array 
    (
     [no_response_yet_count] => 2 
    ) 

[18571] => Array 
    (
     [no_response_yet_count] => 1 
    ) 

)

Was ich will, ist, dass, wenn ein Wert ist in der Iteration nicht verfügbar, sein Eintrag sollte leer sein, wie zur Initialisierungszeit definiert. Also, wenn alle anderen Zählungen in den Daten mit Ausnahme no_response_yet_count leer sind, sollte das Array sein:

Erwartete Ausgabe

Array 
(
[18569] => Array 
    (
     [invitation_not_sent_count] => 
     [no_response_yet_count] => 2 
     [will_not_attend_count] => 
     [will_attend_count] => 
    ) 

[18571] => Array 
    (
     [invitation_not_sent_count] => 
     [no_response_yet_count] => 1 
     [will_not_attend_count] => 
     [will_attend_count] => 
    ) 

)

Antwort

0

ich in der Regel an diesem Punkt auf eine Abbildungsfunktion zurückgreifen:

function pre_map(&$row) { 
    $row = array 
    (
     'invitation_not_sent_count' => '', 
     'no_response_yet_count' => '', 
     'will_not_attend_count' => '', 
     'will_attend_count' => '' 
    ); 
} 

Dann in der while/for-Schleifen:

{ 
    $id = $result->getId(); 
    if (!isset($DataArray[$id])) { pre_map($DataArray[$id]); } 
    $DataArray[$id]['no_response_yet_count'] = $NRCount; 
} 

Die if (!isset($DataArray[$id])) ist, um sicherzustellen, dass es nicht die gleiche Indexzeile löscht, falls Sie zufällig auf die gleiche ID wiederholen. Somit wird es nur einmal und dann nie wieder in der Schleife abgebildet.

Es gibt einige andere einzeilige Verknüpfungen wie vielleicht sogar array_map(), aber ich zeigte die lange Version, für volle Flexibilität nur für den Fall.

+0

Lassen Sie mich versuchen –

+0

Sorry, hatte einige Syntax goof dort auf die Kopie/einfügen ... – IncredibleHat

+0

Dies hat den Trick für mich. Ich initialisierte das Array mit '$ DataArray = array (array());' und nach der Datenpopulation, um das erste leere Sub-Array am Index 0 zu entfernen, verwendete ich 'unset ($ DataArray [' 0 ']); ' –

Verwandte Themen