Jak od sebe odečíst 2 pole?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
warriotox
Člen | 30
+
0
-

Mám dvě pole s úplně stejnou sturkturou. Element je vždy pole s hodnotou room_type, type, private a count
Chci vzít pole $typesMaxCount a porovnat ho s polem $reservedCount. V případě, že se najde stejný ROOM_TYPE tak odečíst od COUNT v poli $typesMaxCount hodnotu COUNT v poli $reservedCount u toho správného ROOM_TYPE..

$typesMaxCount

array (2)
0 => Nette\Database\Row #3251
	room_type => 0
	type => "Dorm" (4)
	private => 0
	count => 5
1 => Nette\Database\Row #3ab2
	room_type => 1
	type => "Luxury Room P" (13)
	private => 1
	count => 4

$reservedCount

array (1)
0 => Nette\Database\Row #0f76
	room_type => 0
	type => "Dorm" (4)
	private => 0
	count => 4

$idealniVysledek

//tohle bych chtel jako vysledek, ale nevim jak na to
array (2)
0 => Nette\Database\Row #3251
	room_type => 0
	type => "Dorm" (4)
	private => 0
	count => 1 //je nyni jedna protoze 5 - 1 = 4
1 => Nette\Database\Row #3ab2
	room_type => 1
	type => "Luxury Room P" (13)
	private => 1
	count => 4
Martk
Člen | 661
+
+1
-

SELECT (table1.count - table2.count) AS diff ...

Nebo

$tmp = $reserved;
foreach ($values as $index => $row) {
	foreach ($tmp as $i => $comp) {
		if ($comp->type !== $row->type) {
			continue;
		}
		if (($row->count -= $comp->count) < 1) {
			unset($values[$index]);
		}
		unset($tmp[$i]); // předpokládám, že type je v každém unikátní
	}
}

Editoval Antik (22. 2. 2016 20:45)

warriotox
Člen | 30
+
0
-

Nakonec jsem to udělal takhle

<?php
$idealniVysledek = array();

        foreach ($typesMaxCount as $type => $row)
        {

            $available = (isset($reservedCount[$type]) ? $row->count - $reservedCount[$type]->count : $row->count);


            $idealniVysledek[$type]['count'] = $available;
            $idealniVysledek[$type]['type'] = $row->type;
            $idealniVysledek[$type]['private'] = $row->private;
        }
?>

Akoát teda to výsledný pole pak vypadá takhle:

<?php
array (2)
1 => Nette\Database\Row #3251
    count => 1
    type => "Dorm" (4)
    private => 0
0 => Nette\Database\Row #3ab2
    count => 4
    type => "Luxury Room P" (13)
    private => 1
?>
Martk
Člen | 661
+
0
-

Na tomto příkladu ti to fungovat bude, ale co když to budeš mít takhle?

$typesMaxCount

array (2)
0 => Nette\Database\Row #3ab2
    room_type => 1
    type => "Luxury Room P" (13)
    private => 1
    count => 3
1 => Nette\Database\Row #3251
    room_type => 0
    type => "Dorm" (4)
    private => 0
    count => 5

$reservedCount

array (1)
0 => Nette\Database\Row #0f76
    room_type => 0
    type => "Dorm" (4)
    private => 0
    count => 4

$spatnyVysledek

array (2)
0 => Nette\Database\Row #3ab2
    room_type => 1
    type => "Luxury Room P" (13)
    private => 1
    count => -1
1 => Nette\Database\Row #3251
    room_type => 0
    type => "Dorm" (4)
    private => 0
    count => 5

Editoval Antik (23. 2. 2016 14:13)