PHP:在可能很大的关联数组

时间:2015-05-23 20:00:09

标签: php arrays

我有几个问题,但我会从我想要做的事情开始。

我有一个输入表单,客户端将输入一些信息及其电子邮件地址,我使用电子邮件作为帐户标识符。我想创建一个电子邮件数组,它将首先检查数组中是否存在电子邮件,然后检查显示它们的页面...

这样的事情:

$client_emails = array(
    'email@ex-one.com',
    'email@ex-two.com' => 'page_one',
    'email@ex-three.com' => 'page_two',
    'email@ex-four.com',
    ),

那么这样的话:

if (!empty($form_email)) { // input field variable
    if (in_array($form_email, $client_emails)) {
        // echo content
    }
}

所以上面的内容被放到那里......我想(1)检查电子邮件是否存在,然后(2)看看密钥是否有值,如果有,那么我需要回复它自己要使用的变量。也许在函数中返回它?

我认为我需要一个像$client_page这样的变量,如果该函数没有向键(电子邮件)返回一个值,那么它将返回默认页面。

的伪代码:

function($client_page)... if (key exists) {
    if (key has value) {
        return value
    } else {
        return default
    }
}

我在PHP手册上发现了一个有趣的选项,它给出了array_flip()的一个问题,我不确定它是否有用,但它看起来可能是任何方式: http://php.net/manual/en/function.in-array.php#96198

我也在这个网站上遇到过这个问题,类似但不一样: PHP Searching multidimensional associative array

有什么想法吗?

附带问题:

考虑到我想要存储的电子邮件是敏感信息 - 我是否应该做些什么来保护它而不仅仅是在服务器端文档中?喜欢使用php类吗? (我对使用课程和所有有趣的东西一无所知)

3 个答案:

答案 0 :(得分:1)

您只需要形成一个数组,例如key是电子邮件,value是显示页面,false用于其他情况,例如:

$client_emails = array(
    'email@ex-one.com' => false,
    'email@ex-two.com' => 'page_one',
    'email@ex-three.com' => 'page_two',
    'email@ex-four.com' => false,
);

在您的功能中,您可以使用普通的isset

$test_email = 'sometestemail';
if (isset($client_emails[$test_email]) && $client_emails[$test_email])
    return $client_emails[$test_email];

答案 1 :(得分:1)

使用电子邮件地址作为键,并将其各自的页面作为值。     

$client_emails = array(
    'email@ex-one.com'   => null,
    'email@ex-two.com'   => 'page_one',
    'email@ex-three.com' => 'page_two',
    'email@ex-four.com'  => null
);

if (null !== $form_email) {
    if (isset($client_emails[$form_email])) {
         $client_page = $client_emails[$form_email];
    }
}

 if (null === $client_page) {
     echo 'You can not be here';
 } else {
     // Handle $client_page
 }

答案 2 :(得分:0)

这里描述的是一个非常不完善的架构,它不能很好地扩展。即使预先解析并保存在操作码缓存中的代码,也会有一个点(猜测,大约300-500条记录),将数据保存在数据库中会更有效。维护数据也存在很大问题 - 为了支持对列表的更改,代码必须自我修改,这使得确保其安全性变得非常困难。 Zend操作码+缓存还会影响性能。

如果您控制文件系统,则可以更直接地映射内容....

$f=md5($form_email . $salt);
$d=substr($f,0,3);
$f=$base . '/' . $d . '/' . $f;
If (is_readable($f)) {
    Include $f;
} else {
    Include $default;
}