2010-11-24 24 views
0

に基づく配列は、この配列私がプリントアウトできるようにしたいと思い出力に主キーと外部キー

Array 
(
[0] => Array 
    (
     [id] => 51 
     [category_id] => 37 
     [title] => Sims 
    ) 

[1] => Array 
    (
     [id] => 37 
     [category_id] => 26 
     [title] => Blackberry 
    ) 

[2] => Array 
    (
     [id] => 26 
     [category_id] => 0 
     [title] => Mobile Device 
    ) 

を考える方法:CATEGORY_IDとIDとの関係に基づいて

Mobile Device > Blackberry > Sims 

答えて

0
<?php 

$array = Array(
    array('id' => 51, 'category_id' => 37, 'title' => 'Sims'), 
    array('id' => 37, 'category_id' => 26, 'title' => 'Blackberry'), 
    array('id' => 26, 'category_id' => 0, 'title' => 'Mobile Device')); 

// First build an associative array ID->Object 
$map = array(); 
foreach($array as $value) 
{ 
    $map[$value['id']] = $value; 
} 

// Then build your path 
$path = array(); 
$value = $array[0]; 
while(true) 
{ 
    $path[] = $value['title']; 
    if($value['category_id'] == 0) 
    { 
     break; 
    } 
    $value = $map[$value['category_id']]; 
    if(!isset($value)) 
    { 
     die("Data Inconsistency"); 
    } 
} 


// Display path 
echo implode(array_reverse($path), ' > '); 

?> 
+0

これは素晴らしいです!!!! あなたは完全に私の質問に答えました。私はあなたの偉大さに嘆いています! – stevenmc

+0

あなたはそれを受け入れたものとしてマークする必要があります – andr

0

array_multisort()を試す

+0

これは本当に関係ありません。 – stevenmc

1

idをキーとして配列に使用できますか?あなたの人生は少しシンプルになります。たとえば、あなたはあなたの配列を定義した場合:

//assume $a is your array, defined above 
//and that you have used the id for the array key 
$id = 51 

do { 
print $a['title']; 
$id = $a['category_id']; 
}while($id != 0); 

EDIT:array_multisortは、おそらくこれを行うにはクリーンな方法ではないよう

Array 
(
[51] => Array 
    (
     [id] => 51 
     [category_id] => 37 
     [title] => Sims 
    ) 

[37] => Array 
    (
     [id] => 37 
     [category_id] => 26 
     [title] => Blackberry 
    ) 

[27] => Array 
    (
     [id] => 26 
     [category_id] => 0 
     [title] => Mobile Device 
    ) 

は、その後、あなたがコードを書くことができます。

+0

この問題は、潜在的に任意の順序ではなく、配列が「id」によって正しく並べ替えられているとみなされているかどうかです。私は考えが好きです。私は確かにそのコンセプトを操作することができた。 – stevenmc

0

元の配列には、除外する項目も含まれていますか?

ない場合は、これを使用する:

$sort_array = array(); 
foreach ($original_array as $key => $value) { 
    $sort_array[] = $value['category_id']; 
} 

array_multisort($sort_array, SORT_ASC, $original_array); 

上記の$がcategory_idインデックスに基づいてoriginal_arrayソートします。お使いのアレイは、残りの部分とは何の関係もない、とあなたがそれらを除外したいエントリが含まれている場合

、あなたはこのようなものを使用する必要があります:

// remap keys based on category_id 
$parts = array(); 
foreach ($original_array as $array) { 
    $parts[$array['category_id']] = $array; 
} 

// build tree list 
$category_id = 0; 
$result = array(); 
while (isset($parts[$category_id])) { 
    $result[] = $parts[$category_id]['title']; 
    $category_id = $parts[$category_id]['id']; 
} 

echo implode(' > ', $result); 
関連する問題