Ich versuche, ein Array zu füllen, damit ich mit chart.js ein Diagramm zeichnen kann

Ich habe ein Array, das aussieht wie:

[0] => Array
    (
        [id] => 1
        [date] => 09-04-2018
        [length] => 10
    )

[1] => Array
    (
        [id] => 2
        [date] => 09-04-2018
        [length] => 20
    )

[2] => Array
    (
        [id] => 1
        [date] => 10-04-2018
        [length] => 11
    )

[3] => Array
    (
        [id] => 2
        [date] => 10-04-2018
        [length] => 21
    )

[4] => Array
    (
        [id] => 1
        [date] => 11-04-2018
        [length] => 12
    )

[5] => Array
    (
        [id] => 1
        [date] => 12-04-2018
        [length] => 13
    )

[6] => Array
    (
        [id] => 2
        [date] => 12-04-2018
        [length] => 23
    )

[7] => Array
    (
        [id] => 1
        [date] => 13-04-2018
        [length] => 14
    )

Ich muss dieses Array in 2 Datensätze (ID 1 und ID 2) aufteilen, kann jedoch keine Lücken in diesen Datensätzen haben, da chartJS dies nicht mag.

Ich brauche das Array, um wie folgt auszusehen:

[1] => Array
(
    [09-04-2018] => 10
    [10-04-2018] => 11
    [11-04-2018] => 12
    [12-04-2018] => 13
    [13-04-2018] => 14
)

[2] => Array
(
    [09-04-2018] => 20
    [10-04-2018] => 21
    [11-04-2018] => 0
    [12-04-2018] => 23
    [13-04-2018] => 0
)

Mit folgendem Code: -

foreach ($array as $item)
{
    $id = $item['id'];
    $date = $item['date'];
    $length = $item['length'];

    $output[$id][$date] = $length;
}

Ich kann ein Array in dem von mir gewünschten Format erstellen, aber da dem ursprünglichen Array 2 Daten für Datensatz 2 fehlen, werden diese nicht hinzugefügt, und das Ergebnis ist: -

[1] => Array
(
    [09-04-2018] => 10
    [10-04-2018] => 11
    [11-04-2018] => 12
    [12-04-2018] => 13
    [13-04-2018] => 14
)

[2] => Array
(
    [09-04-2018] => 20
    [10-04-2018] => 21
    [12-04-2018] => 23
)

Gibt es eine Möglichkeit, das Array so zu füllen, wie ich es möchte? Wenn also einer der Datensätze dieses Datum verwendet, müssen beide (möglicherweise 3 oder 4 Datensätze) dieses Datum verwenden, indem sie einfach eine 0 hinzufügen?

1
Chris 17 Apr. 2018 im 13:14

4 Antworten

Beste Antwort

Hier in dieser Lösung, wenn es für niemanden ein Datum gibt, id

Dann wird ein date mit 0 Wert hinzugefügt

$a = array(
        array('id' => '1','date' => '09-04-2018','length' => '10'),
        array('id' => '2','date' => '09-04-2018','length' => '20'),
        array('id' => '1','date' => '10-04-2018','length' => '11'),
        array('id' => '2','date' => '10-04-2018','length' => '21'),
        array('id' => '1','date' => '11-04-2018','length' => '12'),
        array('id' => '1','date' => '12-04-2018','length' => '13'),
        array('id' => '2','date' => '12-04-2018','length' => '23'),
        array('id' => '1','date' => '13-04-2018','length' => '14')
    );

$b = array_unique(array_column($a,'date'));
$a1 = $a2 = [];

foreach ($b as $key => $date) {
    $a1[1][$date] = 0;
    $a1[2][$date] = 0;
    foreach ($a as $key2 => $value2) {
        if($value2['id'] == 1){
            if($date == $value2['date']){
                $a1[1][$date] = $value2['length'];
            }
        }elseif($value2['id'] == 2){
            if($date == $value2['date']){
                $a1[2][$date] = $value2['length'];
            }
        }
    }
}

Für mehr als 2 Datensätze

$b = array_unique(array_column($a,'date'));
$sets = array_unique(array_column($a,'id'));
$a1 = $a2 = [];

foreach ($sets as $s) {
    foreach ($b as $key => $date) {
        $a1[$s][$date] = 0;
        foreach ($a as $key2 => $value2) {
            if($value2['id'] == $s){
                if($date == $value2['date']){
                    $a1[$s][$date] = $value2['length'];
                }
            }
        }
    }   
}

echo "<pre>";
print_r($a1);
echo "</pre>";

AUSGABE

Array
(
    [1] => Array
        (
            [09-04-2018] => 10
            [10-04-2018] => 11
            [11-04-2018] => 12
            [12-04-2018] => 13
            [13-04-2018] => 14
        )

    [2] => Array
        (
            [09-04-2018] => 20
            [10-04-2018] => 21
            [11-04-2018] => 0
            [12-04-2018] => 23
            [13-04-2018] => 0
        )

)
1
DEarTh 17 Apr. 2018 im 17:28

EINGABE

$array = array(
    array('id' => 1,'date' => '09-04-2018','length' => 10),
    array('id' => 2,'date' => '09-04-2018','length' => 20),
    array('id' => 1,'date' => '10-04-2018','length' => 11),
    array('id' => 2,'date' => '10-04-2018','length' => 21),
    array('id' => 1,'date' => '11-04-2018','length' => 12),
    array('id' => 1,'date' => '12-04-2018','length' => 13),
    array('id' => 2,'date' => '12-04-2018','length' => 23),
    array('id' => 1,'date' => '13-04-2018','length' => 14)
);

LÖSUNG

    $id = array();
foreach($array as $r){
    $data[$r['id']][$r['date']] = $r['length'];
    if(!in_array($r['id'],$id)) $id[] = $r['id'];
}
for($i=0;$i<count($id);$i++){
    $cid = $id[$i];
    $nid = $id;
    unset($nid[$i]);
    foreach($data[$cid] as $k => $r){
        foreach($nid as $n){
            if(!isset($data[$n][$k]))$data[$n][$k] = 0;
        }
    }
}
echo "<pre>";print_r($data);

AUSGABE

Array
(
    [1] => Array
        (
            [09-04-2018] => 10
            [10-04-2018] => 11
            [11-04-2018] => 12
            [12-04-2018] => 13
            [13-04-2018] => 14
        )

    [2] => Array
        (
            [09-04-2018] => 20
            [10-04-2018] => 21
            [11-04-2018] => 0
            [12-04-2018] => 23
            [13-04-2018] => 0
        )

)
1
GYaN 17 Apr. 2018 im 11:16
<?php
$dataset=array();
for ($i=0;$i<=10;$i++){
    for ($k=0;$k<=100;$k++){
$int= mt_rand(time()-1000000,time());
$dataset[$i][date("Y-m-d",$int)] = mt_rand(0,30) ;
}
}

print_r($dataset);

Sie werden so etwas bekommen

Array
(
    [0] => Array
        (
            [2018-04-16] => 19
            [2018-04-11] => 24
            [2018-04-09] => 21
            [2018-04-10] => 7
            [2018-04-06] => 19
            [2018-04-12] => 11
            [2018-04-14] => 3
            [2018-04-07] => 19
            [2018-04-15] => 20
            [2018-04-13] => 2
            [2018-04-17] => 29
            [2018-04-08] => 0
        )

    [1] => Array
        (
            [2018-04-09] => 12
            [2018-04-13] => 13
            [2018-04-11] => 23
            [2018-04-06] => 28
            [2018-04-07] => 24
            [2018-04-15] => 26
            [2018-04-08] => 19
            [2018-04-12] => 24
            [2018-04-17] => 24
            [2018-04-16] => 26
            [2018-04-14] => 17
            [2018-04-05] => 24
            [2018-04-10] => 17
        )

    [2] => Array
        (
            [2018-04-14] => 29
            [2018-04-08] => 25
            [2018-04-15] => 17
            [2018-04-11] => 30
            [2018-04-06] => 0
            [2018-04-10] => 9
            [2018-04-12] => 7
            [2018-04-13] => 4
            [2018-04-07] => 23
            [2018-04-16] => 22
            [2018-04-09] => 12
            [2018-04-17] => 14
        )

    [3] => Array
        (
            [2018-04-10] => 22
            [2018-04-13] => 14
            [2018-04-11] => 6
            [2018-04-16] => 5
            [2018-04-15] => 27
            [2018-04-14] => 21
            [2018-04-09] => 2
            [2018-04-06] => 5
            [2018-04-08] => 20
            [2018-04-12] => 6
            [2018-04-17] => 6
            [2018-04-05] => 5
            [2018-04-07] => 23
        )

    [4] => Array
        (
            [2018-04-06] => 20
            [2018-04-05] => 20
            [2018-04-09] => 5
            [2018-04-07] => 25
            [2018-04-15] => 12
            [2018-04-13] => 22
            [2018-04-10] => 3
            [2018-04-16] => 11
            [2018-04-11] => 16
            [2018-04-14] => 5
            [2018-04-12] => 7
            [2018-04-17] => 25
            [2018-04-08] => 12
        )

    [5] => Array
        (
            [2018-04-07] => 24
            [2018-04-15] => 3
            [2018-04-12] => 13
            [2018-04-06] => 18
            [2018-04-09] => 4
            [2018-04-08] => 2
            [2018-04-10] => 2
            [2018-04-11] => 14
            [2018-04-16] => 17
            [2018-04-13] => 0
            [2018-04-14] => 25
            [2018-04-17] => 30
            [2018-04-05] => 20
        )

    [6] => Array
        (
            [2018-04-06] => 5
            [2018-04-16] => 6
            [2018-04-13] => 18
            [2018-04-08] => 5
            [2018-04-11] => 11
            [2018-04-15] => 18
            [2018-04-12] => 8
            [2018-04-14] => 23
            [2018-04-05] => 0
            [2018-04-17] => 22
            [2018-04-09] => 27
            [2018-04-10] => 25
            [2018-04-07] => 19
        )

    [7] => Array
        (
            [2018-04-07] => 2
            [2018-04-15] => 6
            [2018-04-16] => 24
            [2018-04-08] => 24
            [2018-04-09] => 0
            [2018-04-10] => 21
            [2018-04-11] => 26
            [2018-04-13] => 4
            [2018-04-12] => 25
            [2018-04-06] => 16
            [2018-04-14] => 17
            [2018-04-05] => 13
            [2018-04-17] => 16
        )

    [8] => Array
        (
            [2018-04-10] => 6
            [2018-04-16] => 2
            [2018-04-12] => 7
            [2018-04-15] => 15
            [2018-04-07] => 25
            [2018-04-09] => 17
            [2018-04-08] => 25
            [2018-04-06] => 4
            [2018-04-11] => 29
            [2018-04-14] => 6
            [2018-04-13] => 15
            [2018-04-17] => 28
            [2018-04-05] => 20
        )

    [9] => Array
        (
            [2018-04-09] => 2
            [2018-04-11] => 14
            [2018-04-14] => 20
            [2018-04-07] => 3
            [2018-04-13] => 23
            [2018-04-17] => 3
            [2018-04-16] => 16
            [2018-04-15] => 2
            [2018-04-06] => 27
            [2018-04-12] => 5
            [2018-04-10] => 26
            [2018-04-08] => 3
        )

    [10] => Array
        (
            [2018-04-07] => 20
            [2018-04-11] => 28
            [2018-04-14] => 4
            [2018-04-05] => 13
            [2018-04-16] => 0
            [2018-04-09] => 27
            [2018-04-08] => 22
            [2018-04-06] => 30
            [2018-04-12] => 14
            [2018-04-13] => 5
            [2018-04-15] => 18
            [2018-04-17] => 4
            [2018-04-10] => 21
        )

)
0
Wils 17 Apr. 2018 im 10:26

Fügen Sie einfach eine Bedingung hinzu und Sie erhalten, wie Sie es benötigen

$data_set = array();
    foreach ($array as $item)
    { 
        $data_set[$item['id']][$item['date']] = (($item['length'] == 0)?0:$item['length']);
    }
echo '<pre>'; print_r($data_set); echo '</pre>';exit();
0
Satish51 17 Apr. 2018 im 10:55