I've modified the code, at least 5 times to make it work, but I need a last push, and I can't seem to get it:
private function array_key_exists_r($needle, $haystack)
{
$result = array_key_exists($needle, $haystack);
if ($result) return $result;
foreach ($haystack as $v) {
if (is_array($v)) {
$result = $this->array_key_exists_r($needle, $v);
}
if ($result) return $result;
}
return $result;
}
while($row = $this->stmt->fetch())
{
$factura = $row['factura']; /*This is how I get the receipt's number*/
print($factura);
$result = $this->array_key_exists_r($factura,$this->factura);
if(!$result)
{
if(!in_array($factura,$this->trigger)) $this->trigger[] = $factura;
$this->factura = array($factura => array('producto_id' => array($row['producto_id']),
'producto' => array($row['producto']),
'cantidad' => array($row['cantidad']),
'price_i' => array($row['price_i']),
'tax' => array($row['tax'])
)
);
}
else
{
$this->factura[$factura]['producto_id'][] =$row['producto_id'];
$this->factura[$factura]['producto'][] =$row['producto'];
$this->factura[$factura]['cantidad'][]= $row['cantidad'];
$this->factura[$factura]['price_i'][] =$row['price_i'];
$this->factura[$factura]['tax'][] = $row['tax'];
}
}
Explaining:
The code is trying to do the following:
Create an array which first keys are the receipt number, and to that receipt number add all the products that were fetched from the database.
What I'm getting:
The array is being currently overwrote by the last receipt #. I know that the root of all this evil is this portion of the code:
if(!in_array($factura,$this->trigger)) $this->trigger[] = $factura;
[b] $this->factura = [/b]array($factura => array('producto_id' => array($row['producto_id']),
'producto' => array($row['producto']),
'cantidad' => array($row['cantidad']),
'price_i' => array($row['price_i']),
'tax' => array($row['tax'])
)
);
The bold part should actually be:
$this->factura[] =
But by doing so, the whole schema breaks, and the receipts are not appended in order.
Now, in English:
The result I'm getting without any mods:
Array ( [4] => Array ( [producto_id] => Array ( [0] => E5030 [1] => E5060 [2] => E0094 [3] => E7485 ) [producto] => Array ( [0] => Product # 1 [1] => Product # 2 [2] => Product # 3 [3] => Product # 4 ) [cantidad] => Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 1 ) [price_i] => Array ( [0] => 286.62 [1] => 301.92 [2] => 153 [3] => 481 ) [tax] => Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 1 ) ) )
WHICH IS GOOD, but the other receipts are overwritten.
But if I made the change I was talking about before, I'd get:
Array ( [0] => Array ( [1] => Array ( [producto_id] => Array ( [0] => A4318 ) [producto] => Array ( [0] => Product name ) [cantidad] => Array ( [0] => 1 ) [price_i] => Array ( [0] => 771.12 ) [tax] => Array ( [0] => 0 ) ) ) [1] => Array ( [producto_id] => Array ( [0] => 102992 ) [producto] => Array ( [0] =>Product name ) [cantidad] => Array ( [0] => 1 ) [price_i] => Array ( [0] => 1128.12 ) [tax] => Array ( [0] => 0 ) ) [2] => Array ( [2] => Array ( [producto_id] => Array ( [0] => A5816 ) [producto] => Array ( [0] => Product name ) [cantidad] => Array ( [0] => 1 ) [price_i] => Array ( [0] => 630.36 ) [tax] => Array ( [0] => 0 ) ) ) [3] => Array ( [4] => Array ( [producto_id] => Array ( [0] => E5030 ) [producto] => Array ( [0] => Product name ) [cantidad] => Array ( [0] => 1 ) [price_i] => Array ( [0] => 286.62 ) [tax] => Array ( [0] => 1 ) ) ) [4] => Array ( [producto_id] => Array ( [0] => E5060 [1] => E0094 [2] => E7485 ) [producto] => Array ( [0] => Product name [1] => Product name [2] => Product name ) [cantidad] => Array ( [0] => 1 [1] => 1 [2] => 1 ) [price_i] => Array ( [0] => 301.92 [1] => 153 [2] => 481 ) [tax] => Array ( [0] => 1 [1] => 1 [2] => 1 ) ) ) Array
What I'm really after:
Array ( [1] => Array ( [producto_id] => Array ( [0] => E5030 ) [producto] => Array ( [0] => Product # 1 ) [cantidad] => Array ( [0] => 1 ) [price_i] => Array ( [0] => 286.62 ) [tax] => Array ( [0] => 1 ) ) ) Array ( [2] => Array ( [producto_id] => Array ( [0] => E5030 [1] => E5060 ) [producto] => Array ( [0] => Product # 1 [1] => Product # 2 ) [cantidad] => Array ( [0] => 1 [1] => 1 ) [price_i] => Array ( [0] => 286.62 [1] => 301.92 ) [tax] => Array ( [0] => 1 [1] => 1 ) ) ) Array ( [4] => Array ( [producto_id] => Array ( [0] => E5030 [1] => E5060 [2] => E0094 [3] => E7485 ) [producto] => Array ( [0] => Product # 1 [1] => Product # 2 [2] => Product # 3 [3] => Product # 4 ) [cantidad] => Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 1 ) [price_i] => Array ( [0] => 286.62 [1] => 301.92 [2] => 153 [3] => 481 ) [tax] => Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 1 ) ) )
**Note that the 3 is missing on purpose because the receipt's number does not belong to the user I'm currently fetching on the database.
I know this post is looooooooooooooooooooooooooooooooooooong, but if someone could give me a little help I'd appreciate it a lot! Thanks







