2010-09-09 14 views
0

J'ai ce code,boucle for chcek ID précédent et sauter itération si nécessaire

<?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; ?> 

Fondamentalement, ce que cela ne fait cracher de certaines options pour un menu de sélection, mais parfois les sélectionner des options se dupliqués, est-il façon que je ne crache jamais 1 instance de chaque valeur? En utilisant ce que j'ai déjà dans la boucle for? Certains aiment vérifier que le $info['grade_id'] ne correspond pas au précédent et s'il ignore cette itération?

Ceci est ce que le tableau d'information ressemble,

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" 
    } 
} 

Vous pouvez voir dans la sortie il y a 2 [grade_desc] le même grade GCSE D en mathématiques, l'anglais et la réussite du diplôme de niveau 1 Brickwork ou équivalent. Cependant, il n'y a qu'un seul enregistrement dans la base de données, puis-je supprimer les données répétées du tableau?

+0

Faites un 'var_dump ($ information);' et voir si les doublons sont là. Comment collectez-vous ces données - à partir d'une base de données, d'un fichier texte, codé en dur, etc.? – BoltClock

+0

imo serait plus facile de le faire ~ avant ~ passer les données à foreach() - peut-être à l'étape de la requête si les données proviennent d'une base de données. Si vous ne voulez pas de données en double ici, cela suggère que vous ne voulez pas de données en double ailleurs - peut-être qu'une refonte de la structure est nécessaire. – Ross

Répondre

2

essayer

foreach(array_unique($information) as $info) 

plus, prêter attention aux commentaires de Ross: il pourrait être préférable d'optimiser votre requête db en premier lieu

plus, les noms de variables "$ d'information" et "$ info" juste suce. J'espère que ce n'est qu'un exemple!

+0

+1 pour l'obtenir en premier. – NAVEED

1

utilisation array_unique sur $ des informations variables avant de l'utiliser dans le foreach.

exemple:

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

Check above code

0

Utilisez une variable supplémentaire où vous stockez le dernier ID de qualité:

$lastGradeID = null; 
foreach ($information as $info) : 
    if ($lastGradeID !== $info['grade_id']) : 
?> 
… 
<?php 
    endif; 
    $lastGradeID = $info['grade_id']; 
endforeach;