Jump to content

Recommended Posts

hi, im new to php and was trying to do a sort on an array without using the predefined ones, everything else seems to be working except for this part..

was hoping you guys could help me out. thanks in advance..

 

<?php
$array1 = array(4,8,2,7,1);
$smallest;

//find smallest value in array
function findSmallest($array){
$size = count($array);
$GLOBALS['smallest'] = $array[0];
for($i = 0; $i < $size; $i++) {
	if($GLOBALS['smallest'] > $array[$i+1]){
		$GLOBALS['smallest'] = $array[$i+1];				
	}
	//echo $GLOBALS['smallest'] . "<br>";
}	
return $GLOBALS['smallest']; 					
}
findSmall($array1);
echo '<pre>';
	var_dump($GLOBALS['smallest']);//returns null
echo '</pre>';
?>

Link to comment
https://forums.phpfreaks.com/topic/163085-unable-to-return-global-variable/
Share on other sites

ewww... $GLOBALS. I'll rewrite that without $GLOBALS.

 

<?php
$array1 = array(4,8,2,7,1);

//find smallest value in array
function findSmallest($array) {
     return empty($array)? false : min($array);              
}

$min = findSmallest($array1);
echo '<pre>';
var_dump($min);
echo '</pre>';

You don't need to use $GLOBALS here. Just use a variable in your function then assign the result to a variable. And you function is findSmallest not findSmall.

$array1 = array(4,8,2,7,1);
$smallest;

//find smallest value in array
function findSmallest($array){
   $size = count($array);
   $smallest = $array[0];
   for($i = 0; $i < $size; $i++) {
      if($smallest > $array[$i+1]){
         $smallest = $array[$i+1];            
      }
     //echo $GLOBALS['smallest'] . "<br>";
   }   
   return $smallest;                
}
$smallest=findSmallest($array1); // or if you need to use $GLOBALS 
$GLOBALS['smallest']=findSmallest($array1); 
echo '<pre>';
      var_dump($smalles) // or 
      var_dump($GLOBALS['smallest']);
echo '</pre>';

ewww... $GLOBALS. I'll rewrite that without $GLOBALS.

sorry only way i could do it as of now, im still kinda confused with using passed by reference '&$variable'... your code looks great might give me a minute to trace thou..

 

And you function is findSmallest not findSmall.

 

sorry bout that, originally it was findSmall, changed it to findSmallest for readability and yes i have tried your approach too unfortunately when i do an echo or print_r on variable $smallest. it doesnt show anything. i made some comments on my code below. kindly read them to understand what ive figured out so far. thanks

 

$array1 = array(4,8,2,7,1);

function findSmallest($array){
   $size = count($array);
   $smallest = $array[0];
   for($i = 0; $i < $size; $i++) {
      if($smallest > $array[$i+1]){
         $smallest = $array[$i+1];            
      }
     //if i echo $smallest here it returns 4,2,2,1 respectively which means it should return value 1
   }   
   //if i do an echo here it doesnt show anything
   return $smallest;                
}

function mysort($array) {
        $smallest = findSmallest($array);
print_r($smallest); // doesnt show anything
}

mysort($array1);

There's a problem with your method. What if $array is an empty array?

 

Try my function.

 

eureka! :D now im stuck with a new problem my while loop stops at 1st pass, any idea what im doing wrong?

 

<?php
$array1 = array(4,8,2,7,1);
$array2 = array();

//store smallest value into $array2
function getSmall($array, $key) {
	$temp = array_splice($array,$key,1); 
	foreach($temp as $value){
		$GLOBALS['array2'][] = $value;
	}
	$GLOBALS['array1'] = array_diff($GLOBALS['array1'],$GLOBALS['array2']);
}

//find the smallest value in $array1
function findSmallest($array) {
	return empty($array)? false : min($array);            
}

//get index of smallest value
function getSmallIndex($array, $small) {
	$key = array_search($small, $array); 
	return $key;
}

//sort
function mysort($array) {
	while(count($array) > 0) {
		$smallest = findSmallest($array);
		$key = getSmallIndex($array,$smallest);
		$array = getSmall($array,$key);			
	}
}
mysort($array1);

echo '<pre>array1:';
	var_dump($GLOBALS['array1']);
echo '</pre><br>';
echo '<pre>array2:';
			var_dump($GLOBALS['array2']);
echo '</pre>';
?>

What are you trying to do? Sort the array? If so, there is the sort function.

Yes, I am trying to sort the array without using the predefine sort functions in php.

 

Well now my while loop goes on an infinite loop. Any idea what I'm doing wrong?

 

	$array1 = array(4,8,2,7,1);
$array2 = array();

//store smallest value into $array2
function getSmall($array, $key) {
$temp2 = array_splice($array,$key,1); 
foreach($temp2 as $value){
	$GLOBALS['array2'][] = $value;
}
$temp1 = array_diff($GLOBALS['array1'],$GLOBALS['array2']);
$GLOBALS['array1'] = $temp1;
return $temp1;
}

//find the smallest value in $array1
function findSmallest($array) {
return empty($array)? false : min($array);            
}

//get index of smallest value
function getSmallIndex($array, $small) {
$key = array_search($small, $array); 
return $key;
}

//sort
function mysort($array) {
while(count($array) > 0) {
	$smallest = findSmallest($array);
	$key = getSmallIndex($array,$smallest);

	$array = getSmall($array,$key);

	echo '<pre>array1:';
		var_dump($GLOBALS['array1']);
	echo '</pre>';
	echo "<br>";
	echo '<pre>array2:';
		var_dump($GLOBALS['array2']);
	echo '</pre>';

}
}
mysort($array1);

 

here is the output before my browser crashes due to the infinite loop

5// array length before getSmall function inside my mysort function
4//array length after getSmall function inside my mysort function

array1:array(4) {
  [0]=>
  int(4)
  [1]=>
  int(
  [2]=>
  int(2)
  [3]=>
  int(7)
}


array2:array(1) {
  [0]=>
  int(1)
}

4
3

array1:array(3) {
  [0]=>
  int(4)
  [1]=>
  int(
  [3]=>
  int(7)
}


array2:array(2) {
  [0]=>
  int(1)
  [1]=>
  int(2)
}

3
2

array1:array(2) {
  [1]=>
  int(
  [3]=>
  int(7)
}


array2:array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(4)
}

2
2

array1:array(2) {
  [1]=>
  int(
  [3]=>
  int(7)
}


array2:array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(4)
}

2
2

array1:array(2) {
  [1]=>
  int(
  [3]=>
  int(7)
}


array2:array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(4)
}

I was tracing my code and i found the problem, still trying to figure out why this part gets the value of zero thou. Ideas?

$array1 =  array(1=>8, 3=>7);
$array2 = array(0=>1,1=>2, 2=>4);

//same code as the one posted above..

$smallest = findSmallest($array1);
$key = getSmallIndex($array1,$smallest);
echo "key :<b>" . $key . "</b> smallest :<b>" . $smallest ."</b><br><br>";
$temp2 = array_splice($array1,$key,1); //evaluates to array(0) {} not sure why : array_splice($array1,$key,1) ==> array_splice($array1,3,1) ==> array_splice(array,offset,length)
echo '<pre>$array:';
var_dump($temp2);
echo '</pre><br>';	
foreach($temp2 as $value){
echo "$value :" . $value;
$GLOBALS['array2'][] = $value;
}

 

output:

key :3 smallest :7

$array:array(0) {
}

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.