2015-01-20 3 views
1

У меня есть два массива, имеющих элементы в строковом типе. Пример:Сравните элемент массива строк в php

Первый массив

$default_complaint = array("Login", "Printer", "Monitor", "Computer", 
          "Network", "Other");      

Второй массив

$selected_complaint = explode(" ", $s['kindof_request']); 
// Ex : it return like this => array ("Login", "Printer", "Monitor"); 

Теперь, как я могу создать флажков, которые тикали в HTML, сравнивая, что два массива, приведенные выше. Итак, я создаю вот так:

<?php 
$default_complaint = array("Login", "Printer", "Monitor", "Computer", "Network", "Lain-lain");      
$selected_complaint = explode(" ", $s['kindof_request']); 

foreach ($default_complaint as $dc) { 
    foreach ($selected_complaint as $sc) { 

    $check = strcmp($dc, $sc) ; 
    if ($check == 0) { //True 
      echo '<input type="checkbox" checked="checked">'. "$sc" ."<br />"; 
     } else{ //false 
      echo '<input type="checkbox">'. "$dc"."<br />"; 
     } 

    } 
} 
?> 

Мой код по-прежнему дает мне странный результат. Итак, как это сделать, => (0) значение проверяется.

(0)Login (0)Printer (0)Monitor ()Computer ()Network ()Others 

ответ

1

У вас есть две петли, но вы только хотите, чтобы цикл по первый массив. Второй используется только для проверки.

Одной из возможностей петли:

foreach ($default_complaint as $dc) { 

    if (array_search($dc, $selected_complaint) !== FALSE) { 
     echo '<input type="checkbox" checked="checked">'. "$dc" ."<br />\n"; 
    } else{ 
     echo '<input type="checkbox">'. "$dc"."<br />\n"; 
    } 
} 
+0

Спасибо 4 помощь. но ваш код просто пометил последний флажок () Логин() Принтер (0) Монитор() Компьютер() Сеть() Другие, Еще раз спасибо ... –

2

Это должно работать для вас:

(Вы не должны делать вложенный цикл Еогеасп)

<?php 

    $default_complaint = array("Login", "Printer", "Monitor", "Computer", "Network", "Lain-lain");      
    $selected_complaint = explode(" ", $s['kindof_request']); 

    foreach($default_complaint as $k => $v) { 

     if(isset($selected_complaint[$k]) && in_array($selected_complaint[$k], $default_complaint)) 
      echo '<input type="checkbox" checked>' . $v . "<br />"; 
     else 
      echo '<input type="checkbox">' . $v . "<br />"; 
    } 

?> 
+0

Спасибо 4 помощь. но ваш код просто пометил последний флажок () Логин() Принтер (0) Монитор() Компьютер() Сеть() Другие, Еще раз спасибо ... –

1

Вам не нужно два foreach петли. Только один сделает это. Петля через массив $default_complaint и проверьте, присутствует ли этот элемент в массиве $selected_complaint, используя in_array(). Попробуйте использовать:

<?php 
    $default_complaint = array("Login", "Printer", "Monitor", "Computer", "Network", "Other"); 
    $selected_complaint = explode(" ", $s['kindof_request']); 

    foreach ($default_complaint as $dc) 
    { 
     if (in_array($dc, $selected_complaint)) 
      echo '<input type="checkbox" checked>' . $dc . '<br>'; 
     else 
      echo '<input type="checkbox">' . $dc . '<br>'; 
    } 
?> 

Вы также можете попробовать array_search() вместо in_array().

+0

Спасибо 4 помощь. но ваш код просто пометил последний флажок() Вход() Принтер (0) Монитор() Компьютер() Сеть() Другие, Еще раз спасибо ... –

+0

@FadlyDzil У меня нет проблем с этим кодом. Пожалуйста, смотрите [здесь] (http://goo.gl/a9KAu3). Благодарю. –

+0

Oke, я решил эту проблему с помощью: $ selected_complaint = array_map ('trim', explode (',', $ d ['kind_of_request'])); Есть запятые, где взрываются –

Смежные вопросы