для цикла chcek предыдущий идентификатор и пропустить итерацию при необходимости - PullRequest
0 голосов
/ 09 сентября 2010

У меня есть этот код,

<?php foreach($information as $info) : ?>
        <option selected="no" value="<?php echo $info['grade_id'];?>" id="<?php echo $info['grade_id'];?>">
            <?php echo $info['grade_desc'];?>
        </option>
<?php endforeach; ?>

В основном, это то, что он делает, несмотря на некоторые опции для меню выбора, однако иногда опции выбора дублируются, есть ли способ, так что я только когда-либо выплюнул 1экземпляр каждого значения?Используя то, что у меня уже есть в цикле?Например, проверка $info['grade_id'] не совпадает с предыдущей, и если она пропускает эту итерацию?

Так выглядит информационный массив:

    array(4) {
  [0]=>
  array(20) {
    ["career_id"]=>
    string(2) "22"
    ["career_name"]=>
    string(7) "Builder"
    ["career_desc"]=>
    string(293) "Depending on the area of building that you would like to go into will depend on the aspects you will cover. Building covers- Civil Engineering, Electricians, Plunbers, Ground Workers, Brick Layers, Site Supervisors to name but a few. A career in construction can take you into many directions."
    ["degree_needed"]=>
    string(2) "No"
    ["useful_info"]=>
    NULL
    ["useful_links"]=>
    string(45) "http://www.bbcl.co.uk,
http://www.abe.org.uk"
    ["salary_id"]=>
    string(2) "20"
    ["basic_salary"]=>
    NULL
    ["trained_salary"]=>
    NULL
    ["progressed_salary"]=>
    NULL
    ["average_salary"]=>
    string(19) "Based on experience"
    ["careers_career_id"]=>
    string(2) "22"
    ["grade_id"]=>
    string(2) "53"
    ["grade_desc"]=>
    string(103) "GCSE grade D in Maths, English and the successful completion of Diploma Level 1 Brickwork or equivalent"
    ["course_id"]=>
    string(2) "52"
    ["course_type"]=>
    string(24) "Classroom based learning"
    ["course_names"]=>
    string(27) "Any combination of A Levels"
    ["extra_needed"]=>
    NULL
    ["course_link"]=>
    string(55) "http://www.blackburn.ac.uk/sixth_form_as_a2_levels.html"
    ["grades_grade_id"]=>
    string(2) "53"
  }
  [1]=>
  array(20) {
    ["career_id"]=>
    string(2) "22"
    ["career_name"]=>
    string(7) "Builder"
    ["career_desc"]=>
    string(293) "Depending on the area of building that you would like to go into will depend on the aspects you will cover. Building covers- Civil Engineering, Electricians, Plunbers, Ground Workers, Brick Layers, Site Supervisors to name but a few. A career in construction can take you into many directions."
    ["degree_needed"]=>
    string(2) "No"
    ["useful_info"]=>
    NULL
    ["useful_links"]=>
    string(45) "http://www.bbcl.co.uk,
http://www.abe.org.uk"
    ["salary_id"]=>
    string(2) "20"
    ["basic_salary"]=>
    NULL
    ["trained_salary"]=>
    NULL
    ["progressed_salary"]=>
    NULL
    ["average_salary"]=>
    string(19) "Based on experience"
    ["careers_career_id"]=>
    string(2) "22"
    ["grade_id"]=>
    string(2) "53"
    ["grade_desc"]=>
    string(103) "GCSE grade D in Maths, English and the successful completion of Diploma Level 1 Brickwork or equivalent"
    ["course_id"]=>
    string(2) "53"
    ["course_type"]=>
    string(24) "Practical based learning"
    ["course_names"]=>
    string(19) "Bricklaying Level 2"
    ["extra_needed"]=>
    string(3) "Yes"
    ["course_link"]=>
    string(45) "http://www.blackburn.ac.uk/bricklaying_2.html"
    ["grades_grade_id"]=>
    string(2) "53"
  }
  [2]=>
  array(20) {
    ["career_id"]=>
    string(2) "22"
    ["career_name"]=>
    string(7) "Builder"
    ["career_desc"]=>
    string(293) "Depending on the area of building that you would like to go into will depend on the aspects you will cover. Building covers- Civil Engineering, Electricians, Plunbers, Ground Workers, Brick Layers, Site Supervisors to name but a few. A career in construction can take you into many directions."
    ["degree_needed"]=>
    string(2) "No"
    ["useful_info"]=>
    NULL
    ["useful_links"]=>
    string(45) "http://www.bbcl.co.uk,
http://www.abe.org.uk"
    ["salary_id"]=>
    string(2) "20"
    ["basic_salary"]=>
    NULL
    ["trained_salary"]=>
    NULL
    ["progressed_salary"]=>
    NULL
    ["average_salary"]=>
    string(19) "Based on experience"
    ["careers_career_id"]=>
    string(2) "22"
    ["grade_id"]=>
    string(2) "54"
    ["grade_desc"]=>
    string(96) "3 GCSE passes at grade D and above preferably in English, Maths, Science or a Technology subject"
    ["course_id"]=>
    string(2) "54"
    ["course_type"]=>
    string(16) "learn on the job"
    ["course_names"]=>
    string(24) "Apprenticeship Brickwork"
    ["extra_needed"]=>
    NULL
    ["course_link"]=>
    string(56) "http://www.blackburn.ac.uk/apprentices_construction.html"
    ["grades_grade_id"]=>
    string(2) "54"
  }
  [3]=>
  array(20) {
    ["career_id"]=>
    string(2) "22"
    ["career_name"]=>
    string(7) "Builder"
    ["career_desc"]=>
    string(293) "Depending on the area of building that you would like to go into will depend on the aspects you will cover. Building covers- Civil Engineering, Electricians, Plunbers, Ground Workers, Brick Layers, Site Supervisors to name but a few. A career in construction can take you into many directions."
    ["degree_needed"]=>
    string(2) "No"
    ["useful_info"]=>
    NULL
    ["useful_links"]=>
    string(45) "http://www.bbcl.co.uk,
http://www.abe.org.uk"
    ["salary_id"]=>
    string(2) "20"
    ["basic_salary"]=>
    NULL
    ["trained_salary"]=>
    NULL
    ["progressed_salary"]=>
    NULL
    ["average_salary"]=>
    string(19) "Based on experience"
    ["careers_career_id"]=>
    string(2) "22"
    ["grade_id"]=>
    string(2) "55"
    ["grade_desc"]=>
    string(164) "Ascentis Entry Level 3 Certificate in Preparation for Employment in Construction Industries 
A Functional Skills Certificate at Entry Level 3 
A PSHE Certificate "
    ["course_id"]=>
    string(2) "55"
    ["course_type"]=>
    string(24) "Practical based learning"
    ["course_names"]=>
    string(78) "Construction - Preparation for Employment in Construction Industries - Level 3"
    ["extra_needed"]=>
    NULL
    ["course_link"]=>
    string(74) "http://www.blackburn.ac.uk/preparation_for_employment_in_construction.html"
    ["grades_grade_id"]=>
    string(2) "55"
  }
}

Вы можете увидеть вВ результате получается 2 [grade_desc] того же класса GCSE D по математике, английскому языку и успешному завершению дипломной работы 1 уровня кирпичной кладки или эквивалентной.Однако в базе данных есть только одна запись, могу ли я удалить любые повторяющиеся данные массива?

Ответы [ 3 ]

2 голосов
/ 09 сентября 2010

try

  foreach(array_unique($information) as $info)

plus, обратите внимание на комментарий Росса: возможно, было бы лучше оптимизировать ваш запрос базы данных в первую очередь

plus, имена переменных "$ information" и "$ info "просто отстой.Я надеюсь, что это только пример!

1 голос
/ 09 сентября 2010

используйте array_unique on $ information переменную перед использованием в foreach.

пример:

<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
print_r($result);
?>

Проверьте код выше

0 голосов
/ 09 сентября 2010

Используйте дополнительную переменную, где вы храните последний идентификатор класса:

$lastGradeID = null;
foreach ($information as $info) :
    if ($lastGradeID !== $info['grade_id']) :
?>
…
<?php
    endif;
    $lastGradeID = $info['grade_id'];
endforeach;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...