【问题标题】:PHP IF statements and Multidimentional arrays accoriding to dataPHP IF 语句和根据数据的多维数组
【发布时间】:2013-12-24 11:38:57
【问题描述】:

我正在尝试编写一个if() 语句,该语句将根据多维数组中的数据防止发生多种事情。我无法将其转换为代码。

很遗憾,in_array() 不适用于多维数组。


如果学生完成了测验分数 >= 80 的测验,那么它会更新数据。如果学生没有得分 80 或以上,则脚本不会更新数据。

我想要完成的事情(当用户提交测验时)

  • 如果$quiz_score >= 80 AND $quiz_id 不存在,则运行一段代码

  • 如果存在 the quiz_id 并且测验通过 ($quiz_passed == 1) 并且 $quiz_score >= 80,则运行另一段代码来更新分数(如果用户重新参加测验以提高分数,如果新分数80分以下,保持第一分。)

  • 否则重考(表示用户没有得到80分或以上)

根据数据,它们不应该是具有相同$quiz_id的一行

这是我的数据(数组)的图形视图:

这是代码中的数组:

Array
(
    [0] => Array
        (
            [quiz_name] => Quiz 1 - General Chemistry
            [quiz_id] => 1
            [quiz_score] => 100
            [quiz_passed] => 1
        )

    [1] => Array
        (
            [quiz_name] => Quiz 2 - Orangic Chemistry
            [quiz_id] => 24
            [quiz_score] => 100
            [quiz_passed] => 1
        )

    [2] => Array
        (
            [quiz_name] => Quiz 3 - Biochemistry
            [quiz_id] => 31
            [quiz_score] => 25
            [quiz_passed] => 
        )

    [3] => Array
        (
            [quiz_name] => Quiz 4 - Analytical Chemistry
            [quiz_id] => 47
            [quiz_score] => 80
            [quiz_passed] => 1
        )

    [4] => Array
        (
            [quiz_name] => Quiz 5 - Physical Chemistry
            [quiz_id] => 55
            [quiz_score] => 45
            [quiz_passed] => 
        )

)

【问题讨论】:

  • 你的问题是什么?你的描述听起来不错,你应该能够直接实现
  • 从多维数组中拉取数据。基本上搜索数组,编写 if 语句。我尝试使用 in_array() 函数,但它不起作用。
  • 为什么不动态创建一个新的/临时的非多维数组,该数组将包含所有其他数组中的所有 quizz_id ?这样你就可以使用 in_array()
  • user2196728 - 我不知道从哪里开始。我尝试将它们存储在另一个数组中,但这是一次失败的尝试。我的语法可能是错误的。
  • 遍历所有现有数组以填充新数组

标签: php wordpress multidimensional-array


【解决方案1】:

也许这可以完成这项工作:

$input = array
(
    array
        (
            'quiz_name' => 'Quiz 1 - General Chemistry',
            'quiz_id' => 1,
            'quiz_score' => 100,
            'quiz_passed' => 1,
        ),

    array
        (
            'quiz_name' => 'Quiz 2 - Orangic Chemistry',
            'quiz_id' => 24,
            'quiz_score' => 100,
            'quiz_passed' => 1,
        ),

    array
        (
            'quiz_name' => 'Quiz 3 - Biochemistry',
            'quiz_id' => 31,
            'quiz_score' => 25,
            'quiz_passed' => false,
        ),

    array
        (
            'quiz_name' => 'Quiz 4 - Analytical Chemistry',
            'quiz_id' => 47,
            'quiz_score' => 80,
            'quiz_passed' => 1,
        ),

    array
        (
            'quiz_name' => 'Quiz 5 - Physical Chemistry',
            'quiz_id' => 55,
            'quiz_score' => 45,
            'quiz_passed' => false,
        ),

);

$result = array();

foreach($input as $v)
{
   $result['names'][] = $v['quiz_name'];
   $result['ids'][] = $v['quiz_id'];
   $result['scores'][] = $v['quiz_score'];
   $result['quiz_passed'][] = $v['quiz_passed'];
}

print_r(in_array(31,$result['ids'])); // 1
print_r(in_array('Quiz 5 - Physical Chemistry',$result['names'])); //1

【讨论】:

    【解决方案2】:

    假设分数存储在$scores

    foreach ($scores as $test) {
      if ($test['quiz_score'] > 80 && empty($test['quiz_id'])) {
        // Run bit of code
      } elseif (!empty($test['quiz_id']) && $test['quiz_passed'] == 1 && $test['quiz_score'] > 80) {
        // Update score
      } else {
        // Retake quiz
      }
    }
    

    我不确定你所说的 quiz_id 不存在是什么意思,所以我假设你的意思是它是空的。

    另外,我留下了详细信息供您添加。如果您需要任何额外帮助,请告诉我。

    【讨论】:

      猜你喜欢
      • 2016-10-18
      • 2014-11-27
      • 2017-03-30
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多