2

別の配列のコンテンツの正確な順序で連想配列を並べ替える必要があります。配列は、2 つの個別の sql-requests (後述) によって取得されます。リクエストを 1 つのリクエストにまとめることができなかったため、2 番目の配列を最初の配列の順序に並べ替える必要があります。

これらは配列です:

#Array which contains the id's in needed order
$sorting_array = array(1,2,3,8,5,6,7,9,11,10...);

#Array which contains the values for the id's, but in order of "id" ASC
$array_to_sort = array(
              array("id" => "1", "name" => "text1", "help" => "helptxt2");
              array("id" => "2", "name" => "text2", "help" => "helptxt2");
);

SQL-Queries:
$sorting_array の SQL-Ouery:
(db-field 'conf' は "text" として設定されています。おそらくこれは私の問題なので、最初にエントリを爆発させて内破させてから、次のクエリ)。

$result = sql_query("select conf from config where user='me'", $dbi);
$conf = sql_fetch_array($result, $dbi);
$temp = explode(',', $conf[0]); 
$new = array($temp[0], $temp[1], $temp[2], $temp[3],$temp[4],
             $temp[5], $temp[6], $temp[7], $temp[8], $temp[9],
             $temp[10], ...);#Array has max 30 entries, so I count them down here
$sorting_array = implode(',', $new);

$array_to_sort の SQL-Ouery:

$result = sql_query("SELECT id, name, helptxt
                   FROM table 
                   WHERE id IN ($sorting_array)
                   AND language='english'"); 
while ($array_to_sort[] = mysql_fetch_array ($result, MYSQL_ASSOC)) {}
array_pop($array_to_sort);#deleting the last null entry

次のように $array_to_sort にアクセスして、コンテンツを 1 つずつ表示できます

echo $array_to_sort[0]["id"];
echo $array_to_sort[0]["name"];
echo $array_to_sort[0]["helptxt"];

しかし、それは「id」ASC でソートされていますが、$sorting_array のように正確にソートする必要があります。私はいくつかのことを試しました:

while(list(,$array_to_sort) = each($sorting_array)){
$i++;
echo $array_to_sort . "<br>";
}

ID を正しい順序で表示するだけで、コンテンツは表示されません。非常に多くのことを試したので、今は少し混乱していますが、すべて同じ結果になりました。
たぶん sql-query は 1 つのステップで実行できますが、私はそれを機能させませんでした。私の検索のすべての結果は、ASC または DESC をソートする方法を示しただけで、私が望むものではありませんでした。

さらに、私は PHP と MySQL に比較的慣れていないことを告白しなければなりません。
うまくいけば、皆さんの誰かが私を軌道に戻すことができます.
よろしくお願いします。

4

4 に答える 4

1

結果を取得するには:

$result = mysql_query("SELECT id, name, helptxt
  FROM table 
  WHERE id IN ($sorting_array)
  AND language='english'");
$array_to_sort = array();
while ( ($row = mysql_fetch_assoc($result)) !== false ) {
  // associate the row array with its id
  $array_to_sort[ $row[ "id" ] ] = $row;
}

の順に表示するには$sorting_array:

foreach ( $sorting_array as $id ) {
  // replace the print_r with your display code here
  print_r( $array_to_sort[ $id ] );
}

そして、コード取得に関するおまけのヒント$sorting_array:

$result = mysql_query("select conf from config where user='me'", $dbi);
$conf = mysql_fetch_array($result, $dbi);
$temp = explode(',', $conf[0]);
// limit to 30 ids
$new = array();
// no need to do this manually, use a loop
for ( $i = 0; $i < 30; ++$i )
  $new[] = $temp[ 0 ];
$sorting_array = implode(',', $new);
于 2010-01-15T17:19:44.270 に答える
0

ここでは多くのことが起こっているため、それを伝えるのは少し難しいです。将来的には、いくつかの簡単な質問をして、答えを組み合わせる方法を自分で見つければ、おそらくより良い/より多くの応答が得られるでしょう.

長期的には、これらのクエリを組み合わせることができるように SQL テーブルを再構築することをお勧めします。求めていることは PHP で実行できますが、MySQL で実行するよりも遅くなり、はるかに複雑になります。

あなたが求めていることを行うには(PHPではかなり遅い):

$sorted = array();
foreach ( $sorting_array as $id )
{
    foreach ( $array_to_sort as $values )
    {
         if ( $values['id'] == $id )
         {
            $sorted[] = $values;
            break;
         }
    }
}
于 2010-01-15T17:19:06.820 に答える
0

編集!!!

質問を編集できなくなったので、解決策を次のように述べたいと

思います。データベースを再考するためのヒントは、私をいくつかのテストに導いたものであり、次のクエリで解決策を見つけました。

$result = sql_query("SELECT id, name, helptxt
               FROM table 
               WHERE id IN ($sorting_array)
               AND language='english'
               ORDER BY FIELD(id,$sorting_array)"); 
while ($array_to_sort[] = mysql_fetch_array ($result, MYSQL_ASSOC)) {}
array_pop($array_to_sort);#deleting the last null entry

ちょうど行:

ORDER BY FIELD(id,$sorting_array)

トリックを行います。これが 1、4、2、3、9、7 を意味する場合でも、希望どおりに結果を並べ替え
ます。
再度、感謝します!!!

于 2010-01-16T12:07:17.623 に答える
0

このような状況で私がよく行うのは、最初に配列をデータで再配置することです。したがって、キーはIDを表し
ますあなたの場合:

$array_to_sort_ids = array();

foreach ($array_to_sor as $item)
{
    $array_to_sort_ids[$item['id']] = $item;
}

次に、並べ替えは次のように簡単です。

$array_sorted = array();

foreach ($sorting_array as $id)
{
    $array_sorted[] = $array_to_sort_ids[$id];
}

foreach ループが 2 つしかないため、このソリューションは非常に効率的です。

于 2010-01-15T17:28:31.107 に答える