【问题标题】:Run the Correct Array function based on a session variable php基于会话变量 php 运行正确的数组函数
【发布时间】:2015-10-22 14:05:46
【问题描述】:

作为一个非常新手的 php 编码器和 web 开发的初学者,我需要一些建议和帮助,我有一个计算.php 脚本,我将它包含在登录页面中。该脚本根据用户计算价格在表单过程中输入值。在不让事情变得复杂的情况下,因为我将尝试运行一个动态登录页面,由于我们提供 2 种不同的服务,脚本输出的计算价格可能会有所不同,因此服务 1 比服务 2 便宜。

如果会话变量等于特定值,我该如何运行数组函数,例如:

<?php
session_start();
if($_SESSION['service1'] == 'yes') {

这是 Calculation.php 脚本:

$data = array(
    array(
        'min' => "0",
        'max' => "100,000",
        'value' => 249
    ),
    array(
        'min' => "100,001",
        'max' => "200,000",
        'value' => 255
    )
);

function getAdjustedPrice($price, &$table) {
    $priceData = current(array_filter($table, function($value) use(&$price) {
        return $value['min'] <= $price && $value['max'] >= $price;
    }));
    return $priceData['value'];
}

$input = intval($_SESSION["servicecost"]);
printf("", 
       $input, 
       getAdjustedPrice($input, $data));

如果会话变量 1 未设置为是但设置为“否”,则运行计算的第二个变体,然后我将回显输出,因为变体号 2 基本上是服务 2,价格更高。 .

<?php
session_start();
if($_SESSION['service1'] == 'no') {

$data = array(
    array(
        'min' => "0",
        'max' => "100,000",
        'value' => 450
    ),
    array(
        'min' => "100,001",
        'max' => "200,000",
        'value' => 600
    )
);

function getAdjustedPrice($price, &$table) {
    $priceData = current(array_filter($table, function($value) use(&$price) {
        return $value['min'] <= $price && $value['max'] >= $price;
    }));
    return $priceData['value'];
}

$input = intval($_SESSION["servicecost"]);
printf("", 
       $input, 
       getAdjustedPrice($input, $data));

希望这是有道理的,我尝试自己使用 elseif 状态并这样做: if($_SESSION['service1'] == 'yes') { 然后运行它下面的代码,然后 } else { if($_SESSION['service1'] == 'no') { 但我没有运气和不断的愚蠢错误。非常感谢任何建议或意见。谢谢。

【问题讨论】:

  • 不确定这个问题。代码是否不会进入 yes 或 no 代码块?那么你的 SESSION 变量就是问题所在。尝试 var_dump($_SESSION) 看看它持有什么。
  • 是的,很抱歉,由于是新手,仍然很难知道确切的术语和短语供所有高级人员理解,所以我最终走了很长一段路!基本上我正在尝试根据会话值运行 2 个代码块,例如,如果 $_SESSION['service1'] 等于是,那么它将运行第一个代码块而不是第二个代码块,因为值等于 == "yes" 但如果它没有设置为 "yes" 并设置为 == "no" 它将跳过第一个块并运行第二个块。也许这可以通过 elseif 语句来完成?

标签: php arrays session if-statement


【解决方案1】:

如果我理解正确,以下应该做你想做的:

<?php

session_start();

$service = $_SESSION['service1'] == 'yes'
           ? 'service1'
           : 'service2';


$data = array(

    'service1'=>array(
        array(
            'min' => "0",
            'max' => "100,000",
            'value' => 249
        ),
        array(
            'min' => "100,001",
            'max' => "200,000",
            'value' => 255
        )
    ),
    'service2'=>array(
        array(
            'min' => "0",
            'max' => "100,000",
            'value' => 450
        ),
        array(
            'min' => "100,001",
            'max' => "200,000",
            'value' => 600
        )
    )

);


function getAdjustedPrice($price, &$table)
{
    $priceData = current(array_filter($table, function($value) use(&$price) {
        return $value['min'] <= $price && $value['max'] >= $price;
    }));
    return $priceData['value'];
}

$input = intval($_SESSION["servicecost"]);

printf(
    "", 
    $input, 
    getAdjustedPrice($input, $data[ $service ])
);

祝你好运!

编辑: 对于第三个服务,您需要将数据添加到数组并检查会话中的正确值,您可以使用 switch 语句,诀窍是分配正确的服务,我想您需要在会话 $_SESSION['service1'] 中存储不同的值。

所以你的代码现在看起来像:

<?php

session_start();

switch ($_SESSION['service1']) {
    case 'yes':
        $service = 'service1';
        break;
    case 'no':
        $service = 'service2';
        break;
    case '???????':
        $service = 'service3';
        break;
}


$data = array(

    'service1'=>array(
        array(
            'min' => "0",
            'max' => "100,000",
            'value' => 249
        ),
        array(
            'min' => "100,001",
            'max' => "200,000",
            'value' => 255
        )
    ),
    'service2'=>array(
        array(
            'min' => "0",
            'max' => "100,000",
            'value' => 450
        ),
        array(
            'min' => "100,001",
            'max' => "200,000",
            'value' => 600
        )
    ),
    'service3'=>array(
        array(
            'min' => "0",
            'max' => "100,000",
            'value' => 8888888888
        ),
        array(
            'min' => "100,001",
            'max' => "200,000",
            'value' => 9999999999
        )
    )

);


function getAdjustedPrice($price, &$table)
{
    $priceData = current(array_filter($table, function($value) use(&$price) {
        return $value['min'] <= $price && $value['max'] >= $price;
    }));
    return $priceData['value'];
}

$input = intval($_SESSION["servicecost"]);

printf(
    "", 
    $input, 
    getAdjustedPrice($input, $data[ $service ])
);

【讨论】:

  • angelcool.net,我需要第一个计算代码块仅在变量 $_SESSION['service1'] 等于 == "yes" 且未设置为 "yes" 时运行跳过第一个块并运行第二个代码块,因为第一个计算代码块将具有不同的输出价格,例如,如果您看到我发布的第一个块,则数组中的第一个值设置为 'value' => 249 并在第二个代码块第一个数组值设置为'value' => 450 那是因为service1设置为yes将运行第一个块,如果它不是=“yes”,那么如果你得到我,它将运行第二个块?
  • 刚刚看到 :) 我将尽快对其进行测试,因为我只是将我的工作站移动到另一个房间,所以一旦我移动它,我将立即对其进行测试.. 应该'不会太久……虽然看起来不错,但很惊讶你这样做的速度有多快!明天我还会在这里,试图弄清楚第一秒,哈哈!我真的很感激。
  • 作为一个初学者,一个封闭的班轮可能很难让操作员跟上
  • 感谢很多朋友,我还没有机会检查它。我什至没有意识到你已经编辑了原始帖子,所以谢谢,你的球很快,非常感谢。当我使用动态登录页面时,这点代码会有很长的路要走:)
猜你喜欢
  • 2014-10-10
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
相关资源
最近更新 更多