1

私はPHPが初めてで、C++やJavaとは大きく異なるため、PHPで参照がどのように機能するかわかりません。

基本的に、「タグ」を再帰的に探すループがあります。その配列要素の場所が必要な場合は、別の配列を「タグ」内の「タグ」として追加します。私の場合は、タグ、サブタグ、サブサブタグがあります...

コードは次のとおりです。

private function organize_tags(&$tags = NULL)
{
if ($tags === NULL)
{
    return;
}


$organized_tags = array();

$highest_tag_level = -1;
foreach ($tags as $tag)
{
    if($tag['level'] > $highest_tag_level)
    {
        $highest_tag_level = $tag['level'];
    }
}

$current_tag_level = 0;
foreach ($tags as $key => $tag)
{
    if($tag['level'] == $current_tag_level)
    {
        array_push($organized_tags,$tag);
        unset($tags[$key]);
    }
}
$current_tag_level++;

while ($current_tag_level <= $highest_tag_level)
{
   foreach ($tags as $tag)
   {
        if($tag['level'] == $current_tag_level)
        {
            $tag_to_find = $tag['upper_tag'];

            $parent_tag = $this->find_tag($organized_tags, $tag_to_find);


            if($parent_tag != null)
            {
                if(!is_array($parent_tag['tag']))
                {
                    $parent_tag['tag'] = array();
                }
                array_push($parent_tag['tag'], $tag);
            }
        }
    }
    $current_tag_level++;
}

$tags = $organized_tags;

}



private function find_tag(&$tags, &$desired_tag_id)
{
    $ret = NULL;
    foreach($tags as $tag)
    {
        if($tag['id'] == $desired_tag_id)
        {
            return $tag;
        }
        else if (count($tag['tag']) > 0)
        {
            $ret = $this->find_tag($tag, $desired_tag_id);
            if($ret !== NULL)
            {
                return $ret;
            }
        }

    }
    return $ret;
}

誰かが私がこの挿入を取得する方法を教えてくれたら、私はすっごく幸せになるでしょう.

4

1 に答える 1

0

そのため、結果を取得して挿入する非効率的な方法を作成しました。このコードを使用して、ここから配列に挿入しました

とにかくここにコードがあります:

    if ($tags === NULL)
    {
        return;
    }

    $organized_tags = array();

    $highest_tag_level = -1;
    foreach ($tags as $tag)
    {
        if ($tag['level'] > $highest_tag_level)
        {
            $highest_tag_level = $tag['level'];
        }
    }

    $current_tag_level = 0;
    foreach ($tags as $tag)
    {
        if ($tag['level'] == $current_tag_level)
        {
            array_push($organized_tags, $tag);
        }
    }
    $current_tag_level++;

    foreach ($tags as $tag)
    {
        foreach ($organized_tags as $o_tag)
        {
            if ($tag['upper_tag'] == $o_tag['id'])
            {
                $this->array_insert($organized_tags,$tag,(array_search($o_tag,$organized_tags)+1));
            }
        }
    }
    return $organized_tags;

誰かがこれが役に立つことを願っています:D

于 2013-10-09T11:40:30.843 に答える