比较php中字符串数组的元素

时间:2015-01-20 12:50:48

标签: php arrays codeigniter compare

我有两个数组都有字符串类型的元素。 示例:

First Array

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

    }
}
?>

我的代码仍然给我奇怪的结果。那么,如何创建这样的,=&gt; (0)意思是检查。

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

3 个答案:

答案 0 :(得分:2)

这应该适合你:

(你不必做一个嵌套的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 />";
    }

?>

答案 1 :(得分: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";
    }
}

答案 2 :(得分:1)

您不需要两个foreach循环。只有一个人会这样做。循环遍历$default_complaint数组,并使用in_array()检查$selected_complaint数组中是否存在该元素。尝试使用:

<?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()