Get pathway by key in multidimensional array ( PHP )

Hi , how can generate a pathway from a element in array having it's key ?

 
Look at the array below ,

i need function for example
get_path($id) that will return on requested $id = 314  path to it  => : 262,304,312,314

Thanks for all your help.

[262] => Array
(
    [266] => Array
        (
            [288] => 266
            [289] => 266
            [290] => 266
            [291] => 266
            [293] => 266
        )
 
    [267] => 262
    [304] => Array
        (
            [310] => 304
            [312] => Array
                (
                    [314] => 312
                )
 
            [313] => 304
        )
 
    [305] => 262
    [306] => 262
    [311] => 262
)

Open in new window

tajnyAsked:
Who is Participating?
 
dmadoleConnect With a Mentor Commented:
I can't think of anything cleverm but the direct approach attached gives the result you want.

<?
 
$sample = array(
  262 => array(
    266 => array(
      288 => 266,
      289 => 266,
      290 => 266,
      291 => 266,
      293 => 266
    ),
    267 => 262,
    304 => array(
      310 => 304,
      312 => array(
        314 => 312
      ),
      313 => 304
    )
  )
);
 
function pathway($array, $find) {
 
    foreach ($array as $key => $value) {
 
        if (is_array($value)) {
 
            $subkey = pathway($value, $find);
 
            if (isset($subkey)) return "$key,$subkey";
        }
        else if ($key === $find) return $key;
    }
    return NULL;
}
 
echo pathway($sample, 314);
 
?>

Open in new window

0
 
tajnyAuthor Commented:
As simple as is :] Thank you very much!
0
 
tajnyAuthor Commented:
There is a problem with that function you posted , when a searchable element has array in value it returns null ;/

$sample = array(
  262 => array(
    266 => array(
      288 => 266,
      289 => 266,
      290 => 266,
      291 => 266,
      293 => 266
    ),
    267 => 262,
    304 => array(
      310 => 304,
      312 => array(
        314 => 312
      ),
      313 => 304
    )
  )
);
 
echo pathway($sample,266) //gives null 
echo pathway($sample,304) //gives null 
echo pathway($sample,312) //gives null 
echo pathway($sample,310) //ok
echo pathway($sample,267) //ok

Open in new window

0
 
dmadoleCommented:
Then I guess it's just right for the B grade you gave it:

"Grading at Experts Exchange is not like school. It's more like the "10-point Must" system in professional boxing; in other words, an answer is worth an A, unless it doesn't resolve your issue. If it requires you to do a little more research, or figure out one more piece of code, then it's worth a B. If you think it's not worth a B, the custom is to offer the Experts an opportunity to earn a better grade."
0
 
tajnyAuthor Commented:
Figuret it out, we should check is $key == $find before checking  it's an array  , and do a casted comparison or use == instead

and it works.

Greetz.

function pathway(&$array, $find) {
    foreach ($array as $key => $value) {
    	if ((int)$key == (int)$find) { 
    		return $key;
    	} else 
        if (is_array($value)) {
            $subkey = pathway($value, $find);
            if (isset($subkey)) 
            return "$key,$subkey";
        }
    }
    return NULL;
}

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.