Сортировать переменные $ _POST - PullRequest
1 голос
/ 31 мая 2010

Может быть, вам легко, ребята. Я пытаюсь отсортировать переменные $ _POST, отправленные формой, и обновить отсортированный результат в mysql. Я не уверен, как это сделать, и ценю, что любой может мне помочь с этим.

Мой main.php

//I have a loop here. (omitted)
//$k will be increased by 1 every time the loop starts, so I will know the total times of the loops
//the form will be submitted to update.php


echo "<input type='hidden' name='pickTotal' value='".$k."' />";
echo "<input type='hidden' id='point' name='earnedPoint".$k."' value='".$point."' />";
echo "<input type='hidden' id='users' name='userName".$k."' value='".$userPick['user']."' />";

//loop ends

My update.php

if(isset($_POST['submit'])){

    $pickTotal=$_POST['pickTotal']; //get the total loop

    for ($p=0;$p<=$pickTotal;$p++){

        $userToBeUpdated=$_POST['userName'.$p]; 
    $userPoint=$_POST['earnedPoint'.$p]; 

       //sort the $userPoint here. 
       //I need to find out who got the most points
       //and list user's place. 1st, 2nd, 3rd...etc. 


       //update my mysql
    }

Спасибо за любую помощь.

Ответы [ 4 ]

4 голосов
/ 31 мая 2010

Я бы предложил нечто очень похожее на то, что предлагал Марио, но немного по-другому:

echo "<input type='hidden' id='point' name='user[$k][points]' value='".$point."' />";
echo "<input type='hidden' id='users' name='user[$k][name]' value='".$userPick['user']."' />";

Когда вы получите обратно $_POST, у вас будет такой массив:

$_POST['user'] = array(
    0 => array(
        points => 15,
        name => joe
    ),
    1 => array(
        points => 21,
        name => john
    )
);

Оттуда вы можете использовать usort для создания пользовательской функции сортировки:

$data = $_POST['user'];
usort($data, 'usortPost');

function usortPost($a, $b) {
    if ($a['points'] == $b['points']) return 0;
    return $a['points'] < $b['points'] ? 1 : -1;
}
3 голосов
/ 31 мая 2010

Вместо того, чтобы считать $ k и $ p, вы должны использовать специальный синтаксис имени формы PHP:

 <input name="earnedPoint[]" value="...">
 <input name="userName[]" value="...">

Таким образом, вы получаете оба параметра в виде списка, $ _POST ["earnedPoint"] [0] до $ _POST ["earnedPoint"] [99] соответствует $ _POST ["userName"] [0] .. [99 ].

Затем просто сопоставьте оба массива:

 $sort_us = array_combine($keys=$_POST["userName"], $values=$_POST["eP"]);
 arsort($sort_us);

Это должно дать вам первое место.

1 голос
/ 31 мая 2010

Вы можете, как упоминалось ранее, использовать синтаксический сахар, предлагаемый PHP:

echo "<input type='hidden' id='point' name='earnedPoint[{$userPick['user']}]' value='".$point."' />";

Вы могли бы справиться с этим в серверной части так:

foreach ($_POST['earnedPoint'] as $user => $points) {
    // update your SQL table
}

asort($_POST['earnedPoint']); // sort array in ascending order, maintain index assoc

// save your data somehow
1 голос
/ 31 мая 2010

У вас должны быть критерии для сортировки.

В любом случае, функция sort должна вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...