Пак за масиви :(

smile4o

Registered
Значи, написах си следния скрипт:
Код:
for($i = 0; $i < 40; $i++) {
	$rand = rand(1, 5);
	$array[] = $rand;
}
Цикъла пълни масив с цифри от 1 до 5, произволно. След което си написах функция, която търси стойност. Ако я намери връща ключа и, ако не я намери връща "-1"
Код:
function findVal($arr, $searchVal) {
	foreach($arr as $key => $val){
	if($searchVal == $val) {
		return "Element sus stoinost $val e s kluc => " .  $key;
		}
	}
	foreach($arr as $key => $val){
	if($searchVal !== $val) {
		$noKey = "-1";
		return "Nqma takava stoinost = " . $noKey;
		}
	}
}
echo findVal($array, 5);
Резултата на екран в случая е :
Код:
Element sus stoinost 5 e s kluc => 10
So far, so good. Обаче задачаката ми е да връща не индекса на ПЪРВОТО срещане на тази стойност, а на 3-то. И тук, вече ми издъхна логиката :(
Ако някой има идея, как да го направя, ще съм благодарен да сподели.
 
несъм сигорен дали разбрах како искаш да направиш
но примерно вместо return "Element sus stoinost $val e s kluc => " . $key;

може да направиш $return[]= "Element sus stoinost $val e s kluc => " . $key;
и след края на foreach return $return и ще ти върне масив в които ще имаш всичките стоиности
или наи лесно може и така

function findVal($arr, $searchVal) {
$return=array()';
foreach($arr as $key => $val){
if($searchVal == $val) {
$return[]= "Element sus stoinost $val e s kluc => " . $key;
}
}
if(!empty($return){
return $return;
}
else{
return "Nqma takava stoinost = -1";
}
 
хух .. по-добре ползвай array_search вместо foreach ...
мисля ,че ще ти е по удобно , а и може би по бързо.
п.п. array_search връща ключа(индекса)
може да направиш така:

function findVal($arr, $searchVal) {
$lq = array_search($searchVal, $arr);
if($lq != ''){
return "Element sus stoinost $arr[$lq] e s kluc => " . $lq;
}
else {
return "Nqma takava stoinost = -1";
}
}

Нещо такова.


Не съм сигурен какво точно връщаше функията при неуспех дали NULL или FALSE затова съм го направил за момента != ''
 
Ами, аз се поровихх и я открих тази функция array_search веднага. Ама задачата е да НЕ я ползвам :(
 
е кви са тия задачи .. сега няма да откриваме топлата вода...
хората за това са я направили тази функция да олеснение.
Защо да изкарваме всички стойност от масива, че да ги сравняваме като може деректно в масива да претърсим за стойноста..
Поразгледай в мануала за функции ... ако си харесаш нещо пробвай ..но лично аз невярвам да намериш нещо :)

Иначе след като си обходил , буташ всички индекси (от проверката) в 1 масив и изкарваш 3тия (в случая номер 2 ще се пада) та индекс номер 2 от 2рия масив ще отговаря на 3тата стойност от 1вия масив...
 
Успях да "сглобя" нещо такова:
Код:
function findVal($arr, $position) {
	$res = "-1";
	$count = 0;
	foreach($arr as $key => $val){
		$count++;
	if($count == $position) {
		$res = $val;
		break;
		}
	}
	return $res;
}
echo findVal($arr, 6);
Като извън функцията разбира се, имам някакъв масив $arr, който ползвам.
 

Back
Горе