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
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
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
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
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)