php - Recursively search a sub-string in array with strings -


for next array, keys of each sub-array indicates node-id (0) , category name (1) .
trying find parent node-id each sub-category.

example, parent id '3968976031' '10176091' , parent id '3968980031' '3968977031'.
in order define parent, have @ category :
parent of küche & haushalt/heimtextilien, bad- & bettwaren/babybettausstattung küche & haushalt/heimtextilien, bad- & bettwaren

form of appreciated.

      array(6) {       [0]=>       array(2) {         [0]=>         string(8) "10176091"         [1]=>         string(48) "küche & haushalt/heimtextilien, bad- & bettwaren"       }       [1]=>       array(2) {         [0]=>         string(10) "3968976031"         [1]=>         string(68) "küche & haushalt/heimtextilien, bad- & bettwaren/babybettausstattung"       }       [2]=>       array(2) {         [0]=>         string(10) "3968977031"         [1]=>         string(88) "küche & haushalt/heimtextilien, bad- & bettwaren/babybettausstattung/babybettausstattung"       }       [3]=>       array(2) {         [0]=>         string(10) "3968978031"         [1]=>         string(99) "küche & haushalt/heimtextilien, bad- & bettwaren/babybettausstattung/babybettausstattung/bettbezüge"       }       [4]=>       array(2) {         [0]=>         string(10) "3968979031"         [1]=>         string(99) "küche & haushalt/heimtextilien, bad- & bettwaren/babybettausstattung/babybettausstattung/bettdecken"       }       [5]=>       array(2) {         [0]=>         string(10) "3968980031"         [1]=>         string(104) "küche & haushalt/heimtextilien, bad- & bettwaren/babybettausstattung/babybettausstattung/bettwäsche-sets"       }     }  

use foreach :

$seencategories = array(); foreach($myarray $key => $subarray) {      $id = $subarray[0];     $category = $subarray[1];      // $category = küche & haushalt/heimtextilien, bad- & bettwaren/babybettausstattung/babybettausstattung/bettwäsche-sets      // saving category in order found parent in future     $seencategories[$category] = $id;      // parsing category in order find parent     $categorieslist = explode('/', $category);     $nbsubcategories = count($categorieslist);     // remove last subcategory (bettwäsche-sets) find parent     unset($categorieslist[$nbsubcategories-1]);     $parentcategory = implode("/", $categorieslist);     // $parentcategory = küche & haushalt/heimtextilien, bad- & bettwaren/babybettausstattung/babybettausstattung      // deleted loop due performence leak     /*$parentid = null;     for($testingkey = $key-1; $testingkey >= 0; $testingkey--) {         if($parentcategory == $myarray[$testingkey][1]) {             // found parent             $parentid = $myarray[$testingkey][0];             // let's exit loop             break;         }     }*/      // performence improvement     // if we've seen parent, id (we suppose parent can't after children)     if(array_key_exists($parentcategory, $seencategories) {         $parentid = $seencategories[$parentcategory];     } else {         $parentid = null;     }      echo "id of item : $id, category : $category, parentid : $parentid"; } 

edit :

improved performences according mr.dos's comment. thanks.


Comments