434,701 Members | 1,966 Online
Need help? Post your question and get tips & solutions from a community of 434,701 IT Pros & Developers. It's quick & easy.

# Multidimensional array - search for relationships

 P: n/a Hi All, I have a multidimensional array where each sub-array contains just two entries, which indicates a relationship between those two entries. for example the first sub-array: [0] =Array ( [0] =30 [1] =31 ) This states that value 30 is related to 31. I would like to search through the entire multidimensional array (it could be empty or contain hundreds of entries), to see if multiple relationships exist and hence group these relationships into one entry. so for the array below: Array ( [0] =Array ( [0] =30 [1] =31 ) [1] =Array ( [0] =29 [1] =26 ) [2] =Array ( [0] =29 [1] =27 ) [3] =Array ( [0] =29 [1] =28 ) [4] =Array ( [0] =26 [1] =27 ) [5] =Array ( [0] =27 [1] =28 ) ) This should be represented as: Array ( [0] =Array ( [0] =30 [1] =31 ) [1] =Array ( [0] =29 [1] =26 [2] =27 [3] =28 ) ) I am new enough to PHP so I would appreciate your help. Thanks Dec 2 '07 #1
5 Replies

 P: n/a LittleCake wrote: Hi All, I have a multidimensional array where each sub-array contains just two entries, which indicates a relationship between those two entries. for example the first sub-array: [0] =Array ( [0] =30 [1] =31 ) This states that value 30 is related to 31. I would like to search through the entire multidimensional array (it could be empty or contain hundreds of entries), to see if multiple relationships exist and hence group these relationships into one entry. so for the array below: Array ( [0] =Array ( [0] =30 [1] =31 ) [1] =Array ( [0] =29 [1] =26 ) [2] =Array ( [0] =29 [1] =27 ) [3] =Array ( [0] =29 [1] =28 ) [4] =Array ( [0] =26 [1] =27 ) [5] =Array ( [0] =27 [1] =28 ) ) This should be represented as: Array ( [0] =Array ( [0] =30 [1] =31 ) [1] =Array ( [0] =29 [1] =26 [2] =27 [3] =28 ) ) I am new enough to PHP so I would appreciate your help. Thanks while not exactly your solution, the following code will parse the first array to another array that looks like: Array ( [29] =Array ( [0] =26 [1] =27 [2] =28 ) [30] =Array ( [0] =31 ) ) i.e. the array index would be the index term, and the sub-array would contain all the terms that are related to the index term. \$result_array=array(); foreach (\$master_array as \$sub_array) \$result_array[{\$sub_array[0]}][]=\$sub_array[1]; MW Dec 2 '07 #2

 P: n/a Shane is given an edge array (\$aEdges) and wants to know the distinct connected components. This can be done by my function connectedComponents(\$aEdges). The first part walks each edge once to build an adjacency array. The second part, which does the real work, picks an unvisited edge and visits each vertex it can get to from that selected vertex, processing each edge once, so that the total running time is O(E). It'd be O(V+E) for the second part, if singletons (isolated vertices) were to have been allowed. Csaba Gabor from Vienna function connectedComponents (\$aEdges) { // given an edge array, \$aEdges, this will return an array // of connected components. Each element of the returned // array, \$aTrees, will correspond to one component and // have an array of the vertices in that component. \$aAdj = array(); \$aTree = array(); \$ctr=-1; foreach (\$aEdges as \$br) // Construct V/E adjacancy array foreach (\$br as \$i=>\$v) { if (!array_key_exists(\$v,\$aAdj)) \$aAdj[\$v]=array(\$br[1-\$i]); else array_push (\$aAdj[\$v], \$br[1-\$i]); } foreach (\$aAdj as \$v =&\$aTrees[++\$ctr]) // Now build distinct for (\$i=0;\$i

 P: n/a Csaba Gabor wrote: Shane is given an edge array (\$aEdges) and wants to know the distinct connected components. This can be done by my function connectedComponents(\$aEdges). The first part walks each edge once to build an adjacency array. The second part, which does the real work, picks an unvisited edge and visits each vertex it can get to from that selected vertex, processing each edge once, so that the total running time is O(E). It'd be O(V+E) for the second part, if singletons (isolated vertices) were to have been allowed. Csaba Gabor from Vienna function connectedComponents (\$aEdges) { // given an edge array, \$aEdges, this will return an array // of connected components. Each element of the returned // array, \$aTrees, will correspond to one component and // have an array of the vertices in that component. \$aAdj = array(); \$aTree = array(); \$ctr=-1; foreach (\$aEdges as \$br) // Construct V/E adjacancy array foreach (\$br as \$i=>\$v) { if (!array_key_exists(\$v,\$aAdj)) \$aAdj[\$v]=array(\$br[1-\$i]); else array_push (\$aAdj[\$v], \$br[1-\$i]); } foreach (\$aAdj as \$v =&\$aTrees[++\$ctr]) // Now build distinct for (\$i=0;\$i

 P: n/a On Dec 2, 9:24 pm, MW

 P: n/a On Dec 3, 1:33 pm, Csaba Gabor \$v) { if (!array_key_exists(\$v,\$aAdj)) \$aAdj[\$v]=array(\$br[1-\$i]); else array_push (\$aAdj[\$v], \$br[1-\$i]); } foreach (\$aAdj as \$v =&\$aTrees[++\$ctr]) // Now build distinct for (\$i=0;\$i

### This discussion thread is closed

Replies have been disabled for this discussion.