Jak przekazać jeden wymiar tablicy z tablicy wielowymiarowej

Odpowiedz Nowy wątek
2019-08-01 12:45
0

Mam takie pytanie mam tablicę, która zawiera takie dane.

[0] {
   [0] -> 1.2
   [1] -> 3
   [2] -> 1.3

}
[1] {

[0] -> 1
[1] -> 3
[2] -> 1.2
}

I teraz chciałbym przekazać tylko 0 i 1 elementów ale tylko 0 rowe czyli tylko 1.2 i 1

daje kod

        for ($i = $daystart;$i <= $dayend;$i += 86400 ) {
            $days[$j] = $this->calculateAverage($hourStart,$hourEnd,date("Y-m-d H:i:s",$i),date("Y-m-d H:i:s",$i+86400),$type);
            $sumMood += $days[$j][1];
            $sumAnxiety += $days[$j][0];
            $sumNer += $days[$j][2];
            $sumStimu += $days[$j][3];

            $this->days[$j] = date("Y-m-d",$i);
            $j++;
        }
        if ($dayInput == "on") {
            if ($j == 0) {
                return 0;
            }
            return [round($sumMood / $j,2),round($this->sortMood((($days) )),2)];

        }
        return $days;

I tutaj jest tow zmiennje.$days i teraz jak przekazuje to do funkcji sortMood((($days) )),2)]; to zwraca mi błąd

private function calculateAverage($hourStart,$hourEnd,$dataStart,$dataEnd,$type,$dayInput = "") {
return [round($sumAnxiety  / $second,2),round($sumMood  / $second,2),round($sumNer  / $second,2),round($sumStimu  / $second,2)];
...
...
    }
    public function sortMood($list) {
        $sort = $list;
        if (count($sort) % 2 == 1) {
            $average = array_sum($sort)/count($sort);
            array_push($sort, $average);
        }
        asort($sort);
        $count = count($sort)-1;
        $tmp = 0;
        $tmp2 = 0;

        for ($i=0;$i < count($sort) / 2;$i++) {
            $tmp = $sort[$count] - $sort[$i];
            $count--;
            if ($tmp < 0) {
                $tmp = -$tmp;
            }
            $tmp2 += $tmp;
        }
        if (count($sort) == 0)  {
            return 0;
        }      
        return ($tmp2 / count($sort));
    }
edytowany 1x, ostatnio: furious programming, 2019-08-02 17:27

Pozostało 580 znaków

2019-08-01 16:51
0

co włąściwie przekazujesz do tej funkcji, bo trudno to wywnioskować?

Tablicę zawierającą dane typu tablice która zawiera średnią nastroju itp. tylko, że ta funkcja pobiera tablice jednowymiarową a ja mam teraz od nie dawna wielowymiarową. - pol90 2019-08-01 17:48
i przekazujesz tablice tablic? I próbujesz dwa elementy czyli tablice odjąć od siebie? - Miang 2019-08-01 19:58
Tablice tablic. - pol90 2019-08-01 19:59

Pozostało 580 znaków

2019-08-01 20:03
0

https://www.php.net/manual/en/language.operators.array.php odejmowanie tu nie ma

Pozostało 580 znaków

2019-08-02 17:15
0
Miang napisał(a):

https://www.php.net/manual/en/language.operators.array.php odejmowanie tu nie ma

Dodawania też nie ma xD
W php w przypadku tablic operator + nie oznacza dodawania obu tablic do siebie. To taki minimalnie inny array_merge.

pol90 napisał(a):

[0] {
[0] -> 1.2
[1] -> 3
[2] -> 1.3

}
[1] {

[0] -> 1
[1] -> 3
[2] -> 1.2
}

I teraz chciałbym przekazać tylko 0 i 1 elementów ale tylko 0 rowe czyli tylko 1.2 i 1

$array = [
    [3,5,7,3],
    [7,2,3,4],
    [5,2,1]
];

var_dump(
    array_reduce($array, function($result, $e) {
        $result[] = $e[0];
        return $result;
     })
);
edytowany 3x, ostatnio: serek, 2019-08-02 17:25

Pozostało 580 znaków

2019-08-02 18:26
0

Już sobie poradziłem zrobiłem to w taki sposób

       $days[0][$j] = $this->calculateAverage($hourStart,$hourEnd,date("Y-m-d H:i:s",$i),date("Y-m-d H:i:s",$i+86400),"mood");
            $days[1][$j] = $this->calculateAverage($hourStart,$hourEnd,date("Y-m-d H:i:s",$i),date("Y-m-d H:i:s",$i+86400),"anxiety");
            $days[2][$j] = $this->calculateAverage($hourStart,$hourEnd,date("Y-m-d H:i:s",$i),date("Y-m-d H:i:s",$i+86400),"ner");
            $days[3][$j] = $this->calculateAverage($hourStart,$hourEnd,date("Y-m-d H:i:s",$i),date("Y-m-d H:i:s",$i+86400),"stimulation");

A do funkcji przekazuje tak

round($this->sortMood((($days[0]) )),2)

Czyli po prostu zamieniłem wiesze i kolumny.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0