Reputation: 132
I am trying to write selection algorithm in php as recursive. As seen it is correct logic but it does not work. here ar code example:
$array = [4,5,22,0,-9];
function findmin($arr){
if(sizeof($arr) > 0){
$min_index = 0;
for ($i = 1; $i < sizeof($arr); $i++){
if($arr[$min_index] > $arr[$i]){
$min_index = $i;
}
}
unset($arr[$min_index]);
findmin($arr);
}
}
findmin($array);
and output is:
Notice: Undefined offset: 0 in test.pnp.php on line 20
Notice: Undefined offset: 0 in test.pnp.php on line 20
Notice: Undefined offset: 0 in test.pnp.php on line 20
Notice: Undefined offset: 0 in test.pnp.php on line 20
Notice: Undefined offset: 0 in test.pnp.php on line 20...
p.s. line 20 is part of code: if($arr[$min_index] > $arr[$i]){
Upvotes: 0
Views: 71
Reputation: 682
When you unset element in an array, the keys remain the same. Lets have keys 0, 1, 2 - unset key 0, the array will have keys 1, 2 - so, for next loop use array_values($arr) - that will reindex you keys. Also you've missed return statement. Fixed code below
<?php
$array = [4,5,22,0,-9];
function findmin($arr){
if(sizeof($arr) > 1){
$min_index = 0;
for ($i = 1; $i < sizeof($arr); $i++){
if($arr[$min_index] > $arr[$i]){
$min_index = $i;
}
}
unset($arr[$min_index]);
// Here is added return and fixed indexes of array
return findmin(array_values($arr));
} elseif (sizeof($arr) === 1) {
return $arr[0];
}
}
echo findmin($array);
Upvotes: 0
Reputation: 420
there is a simple way to find minimum recursivly :
function findMin($arr){
$min = 0;
foreach($arr as $item){
if(is_array($item)){
$val = findMin($item);
}else{
$val = $item;
}
$min = $val<$min?$val:$min;
}
return $min;
}
also you can use min()
function
Upvotes: 1