2016-06-15 13 views
0

私は3つの異なる値(管理者から管理)を持つ3つの変数を持っています。PHPを使用した値に基づいてタブを並べ替える

$tab_download_pos = 2; 
$tab_download_title = "Download"; 
$tab_overview_pos = 1; 
$tab_overview_title = "Overview"; 
$tab_faq_pos = 3; 
$tab_faq_title = "FAQ"; 

ここで3つのタブがあり、上記の変数の値に基づいてタブを並べ替えたいと思います。

3つのタブが、私はこのように

$tab_arr = sort(array($tab_download_pos,$tab_overview_pos,$tab_faq_pos)); 

を開始している

1.Overview 
2.Download 
3.Faq 

私は、foreachのループをしましたが、その後、私は失われています。 私はバックエンドから取得している変数の値に基づいてタブを並べ替えたいと思います。

ご協力いただきまして誠にありがとうございます。前もって感謝します。

+0

位置は1,2,3であることが保証されていますか?あるいは、例えば1,2、および4とすることができますか? – trincot

+0

@trincot良い質問です。はい、それは1,2,4です。管理者は、管理者からタブ3を追加する場合と追加しない場合があります。 – Raj

+0

OK、私はそれに対処するために私の答えを掲載しました。 – trincot

答えて

1

ソートする必要はありません。ただ、配列に入れて並べ替え、それksortとキーによる、およびそれらを反復処理する必要があります。

$a = array(); 
$a[$tab_download_pos] = $tab_download_title; 
$a[$tab_overview_pos] = $tab_overview_title; 
$a[$tab_faq_pos] = $tab_faq_title; 
ksort($a); 
foreach($a as $p => $title) { 
    echo "$p.$title\n"; 
} 
+0

シーケンスが1,2,3の場合はうまく動作しますが、1,3,4の場合は破損します。配列$ aの最大キーのような関数を使って、forループから4を取り除いてその最大値を使う必要がありますか?ありがとう。 – Raj

+0

@Raj、私は参照してください。 ksortはすでにキーで配列を並べ替えることができます。更新された回答をご覧ください。 – Fabricator

0

ここにあなたのコードがあります。変数にソートを保存しないでください。ブール値だけが与えられます。このようにそれを行う

<?php 

$tab_download_pos = 2; 
$tab_download_title = "Download"; 
$tab_overview_pos = 1; 
$tab_overview_title = "Overview"; 
$tab_faq_pos = 3; 
$tab_faq_title = "FAQ"; 

$tab_arr = [$tab_download_pos,$tab_overview_pos,$tab_faq_pos]; 

sort($tab_arr); 

print_r($tab_arr); 

結果:数字として

Array ([0] => 1 [1] => 2 [2] => 3) 
1

は私が位置にソートし、それをタイトルと位置の両方を含む1つのデータ構造を作成することをお勧め、となり、隙間なくないかもしれません:

$tab_download_pos = 2; 
$tab_download_title = "Download"; 
$tab_overview_pos = 1; 
$tab_overview_title = "Overview"; 
$tab_faq_pos = 4; 
$tab_faq_title = "FAQ"; 

$tab_arr = array(
    array("pos" => $tab_download_pos, "title" => $tab_download_title), 
    array("pos" => $tab_overview_pos, "title" => $tab_overview_title), 
    array("pos" => $tab_faq_pos,  "title" => $tab_faq_title), 
); 

usort($tab_arr, function ($a, $b) { return $a["pos"] - $b["pos"]; }); 

配列は、その後、次のようになります。

array (
    array (
    'pos' => 1, 
    'title' => 'Overview', 
), 
    array (
    'pos' => 2, 
    'title' => 'Download', 
), 
    array (
    'pos' => 4, 
    'title' => 'FAQ', 
), 
) 
+0

ありがとうございました。それはまさに私が望むように働いています。 – Raj

関連する問題