2010-09-15 2 views
3

Это простая рейтинговая система. Существует 3 значения, которые содержат процент с сопроводительным описанием/именем. Я просто хочу показать описание/имя.Повторение массива PHP отображает только первую букву каждого значения.

По какой-то причине, он отображает:

A

T

I

Это мой сценарий:

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

    // get total value of "Time Management" section 
    for($i = 0; $i < 19; $i++) { 
     $time_management_total += $_POST["time_management_Q$i"]; 
    } 


    // get total value of "Attract Clients" section 
    for($i = 0; $i < 16; $i++) { 
     $attract_clients_total += $_POST["attract_clients_Q$i"]; 
    } 

    // get total value of "Internet Marketing" section 
    for($i = 0; $i < 21; $i++) { 
     $internet_marketing_total += $_POST["internet_marketing_Q$i"]; 
    } 


    // calculate user's personal "Time Management" score 
    $time_management_rating = ($time_management_total/19)/5; 

    // calculate user's personal "Attract Clients" score 
    $attract_clients_rating = ($attract_clients_total/16)/5; 

    // calculate user's personal "Internet Marketing" score 
    $internet_marketing_rating = ($internet_marketing_total/21)/5; 


    // add user ratings to array 
    $user_rating[0] = array('percent' => $time_management_rating, 'description' => 'Time Management'); 
    $user_rating[1] = array('percent' => $attract_clients_rating, 'description' => 'Attract Clients'); 
    $user_rating[2] = array('percent' => $internet_marketing_rating, 'description' => 'Internet Marketing'); 


    // reverse sort the array - highest percentage first 
    rsort($user_rating); 


    // echo the description 
    foreach($user_rating as $category) { 
     foreach($category as $description) { 
      echo $description[description] . "<br />"; 
     } 
    } 
} 
?> 
+0

ты по «Только первое письмо, потому что вы 'ссылается на массив символов строк. поэтому индекс 0 будет первой буквой строки :) – justinl

ответ

6

Вы должны сделать:

foreach($user_rating as $category) { 
     echo $category['description'] . "<br />"; 
} 

Объяснение вашего кода:

Ваш массив как

$user_rating = array(array('percent' => ..., 'description' => ...), array(...)); 

Это означает, что у вас есть двумерный массив.

Когда вы делаете foreach($user_rating as $category), вы перебираете внешний массив. Это означает, что $category будет массивом, а именно array('percent' => ..., 'description' => ...).

Теперь вы делаете ошибку, чтобы снова перебрать этот массив, что означает, что $description всегда будет строковым значением percent и description.

В PHP вы можете получить доступ к строкам с обозначением массива, чтобы получить символ в этой позиции. Поскольку description не определен, он, вероятно, разрешается до 0, и вы получите первый символ.

$foo = 'bar'; 
echo $foo[0]; 
// echos 'b' 

добавив несколько echo с, вы можете увидеть, какой элемент в цикле содержит значение которого:

$user_rating[0] = array('description' => 'Time Management'); 
$user_rating[1] = array('description' => 'Attract Clients'); 
$user_rating[2] = array('description' => 'Internet Marketing'); 

foreach($user_rating as $category) { 
    echo '$category: ' . $category . PHP_EOL; 
    foreach($category as $description) { 
     echo '$description: '. $description . PHP_EOL; 
     echo $description[description] . "<br />" .PHP_EOL; 
    } 
} 

дает

$category: Array 
$description: Time Management 
T<br /> 
$category: Array 
$description: Attract Clients 
A<br /> 
$category: Array 
$description: Internet Marketing 
I<br /> 
+0

Спасибо Феликс, это сделал трюк! –

1

Изменить

echo $description[description] 

в

echo $description['description'] 
0

попробовать

foreach($user_rating as $category) { 
      echo $category['description'] . "<br />"; 
    } 
Смежные вопросы