Сравнить элемент массива строк в переполнении стека

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

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

$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";
}
}
1

Другие решения

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

(Вам не нужно делать вложенный цикл foreach)

<?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 />";
}

?>
2

Вам не нужно два 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(),

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector