cautare in array multidimensional

Ai o întrebare legată de PHP? Incercăm să îi găsim soluţie. Sau poate doar vrei să publici un cod interesant.

Moderatori: Zamolxe, Moderatori

Avatar utilizator
cucul_meu
PHPRomania Supporter
Mesaje: 21
Membru din: Vin Iul 22, 2005 8:00 am

cautare in array multidimensional

Mesajde cucul_meu » Joi Feb 09, 2006 12:02 pm

Goal: O functie ce cauta intr-un array multidimensional (adancimea poate varia evident) o cheie sau o valoare. Cu alte cuvinte daca am gasit o cheie sau o valoare cautata functia sa-mi intoarca un TRUE;

Iata si un mic cod pe care am lucrat:
[php]
<?
$site_modules = array();
$site_modules['planning']['manage_planning'][0] = 'incoming_calls';
$site_modules['planning']['manage_planning'][1] = 'status_service';
$site_modules['planning']['customer_information'] = 'some_info';
$site_modules['second_item'][0] = 'incoming_calls2';

echo '<pre>';
print_r($site_modules);
echo '<hr><hr>';

function section_exists($site_modules, $section) {
foreach($site_modules as $main_module => $module) {
if($main_module == $section or $module == $section) {
return true;
}
elseif(is_array($module)) {
section_exists($module, $section);
}
}
}


if(section_exists($site_modules, 'customer_information')) {
echo '<br>am gasit string-ul';
}
else {
echo '!!NU am gasit string-ul';
}

?>
[/php]

Problema: functia gaseste valoarea cautata (string-ul) dar cu return true nu iese decat dintr-o iteratie, neoprind executia functiei.
Cum sa fac sa opreasca executia functiei ?

Multumiri anticipate



Pirahna
Senior Member
Mesaje: 5985
Membru din: Dum Aug 22, 2004 2:04 am
Localitate: la birou
Contact:

Mesajde Pirahna » Joi Feb 09, 2006 12:08 pm

[php]
<?php

foreach($site_modules as $main_module => $module) {
if($main_module == $section or $module == $section) {
return true;
}
elseif(is_array($module)) {
section_exists($module, $section);
}
else return false;
}

?>
[/php]
|

Avatar utilizator
cucul_meu
PHPRomania Supporter
Mesaje: 21
Membru din: Vin Iul 22, 2005 8:00 am

Mesajde cucul_meu » Joi Feb 09, 2006 12:13 pm


Pirahna
Senior Member
Mesaje: 5985
Membru din: Dum Aug 22, 2004 2:04 am
Localitate: la birou
Contact:

Mesajde Pirahna » Joi Feb 09, 2006 12:14 pm

|

Avatar utilizator
cucul_meu
PHPRomania Supporter
Mesaje: 21
Membru din: Vin Iul 22, 2005 8:00 am

Mesajde cucul_meu » Joi Feb 09, 2006 12:18 pm


Avatar utilizator
ExcalIbvr
Senior Member
Mesaje: 1105
Membru din: Dum Mai 02, 2004 10:56 pm
Localitate: Oradea
Contact:

Mesajde ExcalIbvr » Joi Feb 09, 2006 2:28 pm

Din foreach se iese cu continue. Pune un flag ($found = true) inainte de asta, ca sa vezi daca l-a gasit sau nu.



Avatar utilizator
cucul_meu
PHPRomania Supporter
Mesaje: 21
Membru din: Vin Iul 22, 2005 8:00 am

Mesajde cucul_meu » Joi Feb 09, 2006 3:21 pm

da. acum merge cum trebuie. mersi ExcalIbvr. Acum functia arata cam asa:

[php]
function section_exists($site_modules, $section) {
global $found;

foreach($site_modules as $main_module => $module) {
if($main_module === $section or $module === $section) {
$found = true;
continue;
}
elseif(is_array($module)) {
section_exists($module, $section);
}
}

if($found === true) {
return true;
}

}
[/php]


Înapoi la “Cod PHP”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 14 vizitatori