【问题标题】:Search from multidimensional array从多维数组中搜索
【发布时间】:2014-03-18 17:09:26
【问题描述】:

这是我要搜索的array

$contacts =array(
array( "name"=>"Samatha Perera", "Email"=>"smatha@gmail.com", "Telephone"=>array("office"=>"0112233789","personal"=>"0718256385","home"=>"0112843425")),
array( "name"=>"Charith Fernando", "Email"=>"charith@gmail.com", "Telephone"=>array("office"=>"0112656457","personal"=>"0718456723","home"=>"0112334466")),
array( "name"=>"Malith Wijekoon", "Email"=>"malith@hotmail.com", "Telephone"=>array("office"=>"0332301311","personal"=>"077456453","home"=>"0112556677")),
array( "name"=>"Sanath Perera", "Email"=>"sanath@yahoo.com", "Telephone"=>array("office"=>"0112201654","personal"=>"0757277365","home"=>"0312867725")),
array( "name"=>"Gihan Indran", "Email"=>"gihan@gmail.com", "Telephone"=>array("office"=>"032222526","personal"=>"0778856385","home"=>"0322243426")),
    );

表单将如下所示

搜索方式:姓名电子邮件电话(这是一个组合框)

搜索值:_______________(搜索按钮)

我想在表格中搜索并显示结果如下。

-----------------------------------
Name              | Email                  | Telephone


Samatha Perera       smatha@gmail.com         Office:0112233789

                                              Personal:0718256385

                                              Home:0112843425

【问题讨论】:

  • 您对我们有什么期望?
  • 谁删除了这个问题?
  • 我想从那个数组中搜索
  • 我们很忙。我们在这里帮助那些寻求学习的人。我们不是来为那些懒得学习的人做的。表现出一些努力,我们会提供一些帮助。

标签: php arrays html-table


【解决方案1】:

试试这个......下面的代码将匹配任何文本......

//$search = 'Samatha';
//$search = '011';
$search = 'Ferna';

$match = array();
?>
<table>
<tr>
<td>Name</td>
<td>Email</td>
<td>Phone</td>
</tr>
<?php
foreach($contacts as $key => $value) {

    if(strpos($value['name'],$search) !== false || strpos($value['Email'],$search) !== false) {
        $match[] = $value;
        continue;
    }

    foreach($value['Telephone'] as $k => $v) {
        if(strpos($v,$search) !== false) {
            $match[] = $value;
            break;
        }
    }


}
if(!empty($match))
foreach($match as $key => $value) {
    ?>

<tr>
<td><?php echo $value['name']?></td>
<td><?php echo $value['Email']?></td>
<td><?php 
foreach($value['Telephone'] as $k => $v) {
    echo "{$k} : {$v}<br />";
}
?></td>
</tr>
    <?php
}
?></table>

【讨论】:

    【解决方案2】:

    在我看来,您将需要遍历每个数组并比较值。

    //$search_term = 'Samatha Perera';
    $search_term = '032222526';
    
    foreach ($contacts AS $record) {
    
    
        foreach ($record AS $key => $val) {
    
            $match_found = false;
            if ($key == 'Telephone') {
    
                if (in_array($search_term, $record['Telephone'])) {
                    $match_found = true;
                }
            }
            else {
                if (preg_match('/'.$search_term.'/i', $val)) {
                    $match_found = true;
                }
            }
    
            if ($match_found) {
    
                $name_length = strlen($record['name']);
                $email_length = strlen($record['Email']);
                $total_pad = $name_length + $email_length + 6;
    
                print "\n".$record['name'].' | '.$record['Email'].' | '.$record['Telephone']['office']."\n\n".
                                                             str_pad(' ', $total_pad, ' ', STR_PAD_LEFT).$record['Telephone']['personal']."\n\n".
                                                             str_pad(' ', $total_pad, ' ', STR_PAD_LEFT).$record['Telephone']['home']."\n";
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-03
      • 2011-07-05
      • 1970-01-01
      • 2011-11-29
      • 2011-06-26
      • 2014-06-27
      相关资源
      最近更新 更多