Reputation: 479
I have a function called combined which is going to loop through an array of orders. It is specifically searching for someone who placed more than 1 order and matches based on the customer's name and address line 1. If the customer places 2 orders this will catch them and combine them however if they have 3 or more if only catches 2. When I recursively call the function I get an invalid offset error which I do not understand as I thought the array index would refresh on every function call?
function combined(Array $all) {
//find any matching single orders and combine
$count = count($all);
$combinedorder = array();
for($i=1; $i < $count; $i++) {
for($j=1; $j < $count; $j++) {
//if order # is not the same
if(strcasecmp($all[$i][0], $all[$j][0]) !== 0){
//if name matches
if(strcasecmp($all[$i][2], $all[$j][2]) == 0) {
//if address line 1 matches
if(strcasecmp($all[$i][3], $all[$j][3]) == 0) {
$combinedorder[] = array('ordernos' => array($all[$i][0], $all[$j][0]), $all[$i][1], $all[$i][2], $all[$i][3], $all[$i][4], $all[$i][5], $all[$i][6], $all[$i][7], $all[$i][8], $all[$i][9], $all[$i][10], 'orders' => array($all[$i][11], $all[$j][11]));
unset($all[$i]);
unset($all[$j]);
$all = array_merge($all, $combinedorder);
$all = array_values($all);
reset($all);
//this recursive call does not work. undefined offset error
combined($all);
}
}
}
}
}
return $all;
}
Upvotes: 0
Views: 52
Reputation: 744
You need to re-index the array. You are deleting some of the indexes with unset($all[$i])
and unset($all[$j])
. So when the function calls itself and your loop hits the index that you deleted you get the invalid offset error.
To fix it just add this code after you unset
some of the indexes to reset the keys of the array.
$all = array_values($all);
Upvotes: 1