使用数组在PHP中创建哈希映射

时间:2015-08-31 02:28:02

标签: php arrays

我正在尝试使用PHP中的数组创建哈希映射或二维数组。我的价值观是硬编码的,但这就是我现在所拥有的。我在评论中尝试了代码,但我意识到实际上并没有制作二维数组。

$hash_map = array();
$query = $this->students_m->getStudentClasses('2');
foreach ($query->result_array() as $key1=>$value1) {

    $query2 = $this->students_m->getStudentsInfo('2', '10', '3');

    foreach ($query2->result_array() as $key2=>$value2) {

        /*
        if (!in_array($value2['name'],$hash_map, true)) {
            array_push($hash_map, $value2['name']); 
        }
        */

        hash_map[$value1['id']][] = $value2['name'];
    } 
}

id和student_name是sql表中列的名称。我运行了这段代码以及它的几个变体:

foreach ($hash_map as $student) {
    echo $student;
    echo "<br>";
}

我无法获得正确的输出。我喜欢它,所以每个值都映射到一个唯一值数组,所以我想要的例子如下:

hash_map ['10'] [0] ='123'

hash_map ['10'] [1] ='124'

hash_map ['10'] [2] ='125'

hash_map ['3'] [1] ='123'

hash_map ['3'] [2] ='128'

我关闭的是什么?有人可以帮助我指出正确的方向吗?

2 个答案:

答案 0 :(得分:1)

使用多维数组时,通常需要检查现有键,而不是现有值。

您注释掉的代码应该是这样的

if (!array_key_exists($value1['id'],$hash_map)) {
    $hash_map[$value1['id']] = array();
}

这将设置外部数组,允许您向其添加元素。

有几种方法可以防止将重复数据放入数组的第二部分。如果我们假设name字段是唯一的,或者我们只想知道唯一的条目,那么

if (!in_array($value2['name'],$hash_map[$value1['id']]) {
    $hash_map[$value1['id'][]=$value2['name'];
}

可以正常工作,但是,用户的名字可能不是唯一的(John Smith有人吗?),所以你可能想以某种方式检查$ value2 ['id']。

实现此目的的一种方法是使用$ value2 ['id']作为数组第二部分的键

$hash_map[$value1['id'][$value2['id']]=$value2['name'];

这样可以防止重复密钥存在,因为它们只会相互覆盖。

如果你的内部数组必须从0开始并继续到X,其中X是条目数,那么“exists”数组可能是最好的

$exists = array();
if (!in_array($value2['id'],$exists)) {
    $hash_map[$value1['id']][]=$value2['name'];
    $exists[]=$value2['id'];
}

然后,对于打印,您可能需要以下内容:

foreach ($hash_map as $student) {
    echo implode(",",$student);
    echo "<br>";
}

答案 1 :(得分:1)

使用:

if (!in_array(value2['name'], $hash_map[$value1['id']])) 
{ 
  hash_map[$value1['id']][] = $value2['name'];
} 

这样可以避免添加重复值。