多维数组作为关键

时间:2016-02-17 11:00:20

标签: php arrays multidimensional-array

    $dept = array();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    foreach ($result as $row){
       array_push($dept, 
             array(
                'id'=>$row['Dept'], 
                'cCode'=>$row['ShortDesc'], 
                'cDesc'=>$row['LongDesc']
             )
          )
       );
   }

我在这些代码中的问题是如何在考虑[' id&#39]的情况下获取数据([' ShortDesc']& [' LongDesc']的值) ;]作为关键......

下面是我的样本数据:

**id ShortDesc LongDesc** C BSA Bachelor of Science in Accountancy C BSCS Bachelor of Science in Computer Science M MBA Master in Business Administration

当我输入C作为ID时,结果必须为BSA - Bachelor of .......BSCS - Bachelor...

2 个答案:

答案 0 :(得分:1)

听起来非常简单,您的所有代码目前正在将这三个字段从您的数据库转换为数组中的新结构。要恢复数据,您只需迭代并检查ID,直到找到它为止:

foreach($dept as $current) {
    if ($current['id'] == 'whatever') {
        $cCode = $current['cCode'];
        $cDesc = $current['cDesc'];
        break;
    }
}

echo "$cCode $cDesc" . PHP_EOL;

编辑:

我错过了您的重复关键问题,如下面的评论。

$res = [];
foreach($dept as $current) {
    if ($current['id'] == 'whatever') {
        $res[] = $current;
    }
}

print_r($res);

这更有帮助吗??

答案 1 :(得分:1)

你可能会使用这样的东西:

function filterByID($id, $haystack){
    $matched = array();
    foreach ($haystack as $array) {
        if ($array['id'] === $id) {
            $matched[] = $array;
        }
    }

    return $matched;
}

请注意,您传入的$id 区分大小写。

可以看到它在这里工作:https://ideone.com/yDlY6g

该函数基本上会返回一个过滤版本的数组,因此该数组只包含ID符合搜索条件的数组。

然后你可以用循环打印掉这些,这是一个简单的例子:

$filtered = filterByID('C', $dept);
foreach ($filtered as $department) {
    echo $department['cCode'];
    echo $department['cDesc'];
}

希望有所帮助。