簡體   English   中英

如何基於主鍵和外鍵輸出數組

[英]How to output an array based on primary keys and foreign keys

考慮這個數組

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
    )

我希望能夠打印出:

Mobile Device > Blackberry > Sims

基於category_id和id之間的關系。

您可以使用id作為數組的鍵嗎? 它將使您的生活更加簡單。 例如,如果定義數組:

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
    )

然后,您可以編寫如下代碼:

//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);

編輯:array_multisort可能不是最干凈的方法。

嘗試array_multisort()

您的原始數組是否還包含將被忽略的條目?

如果沒有,請使用以下命令:

$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);
<?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), ' > ');

?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM