通过平面白名单数组过滤二维数组

问题描述 投票:0回答:3

我有以下情况

我有 2 个 arry

以下是答案数组

Array ( 
    [0] => Array (
        [id] => 4e28258263d2c4
        [answer] => Study Accounting 
        [question_id_fk] => 4e28258262d100 
        [correct] => 0 
        [result_text] => Thats a right answer 
        [order] => 1 
    ) 
    [1] => Array ( 
        [id] => 4e28258266d896 
        [answer] => New York 
        [question_id_fk] => 4e28258265b752 
        [correct] => 0 
        [score] => 0.00 
        [result_text] => 
        [order] => 1
    ) 
    [2] => Array ( 
        [id] => 4e282582683870 
        [answer] => Yes 
        [question_id_fk] => 4e282582674ba0 
        [correct] => 0 
        [score] => 0.00 
        [hot_answer] => 0 
        [hot_email] => 
        [ordering] => 1 
        [result_text] => 
        [order] => 1 
    ) 
    [3] => Array ( 
        [id] => 4e282582698c23 
        [answer] => 2 
        [question_id_fk] => 4e282582689e80 
        [correct] => 0 
        [score] => 0.00 
        [hot_answer] => 0 
        [hot_email] => 
        [ordering] => 1 
        [result_text] => 
        [order] => 1 
    ) 
    [4] => Array ( 
        [id] => 4e2825826af072 
        [answer] => 1 
        [question_id_fk] => 4e2825826a0371 
        [correct] => 0 
        [score] => 0.00 
        [hot_answer] => 0 
        [hot_email] => 
        [ordering] => 1 
        [result_text] => 
        [order] => 1 
    ) 
    [5] => Array ( 
        [id] => 4e2825826d9638 
        [answer] => NYC 
        [question_id_fk] => 4e2825826ca998 
        [correct] => 0 
        [score] => 0.00 
        [hot_answer] => 0 
        [hot_email] => 
        [ordering] => 1 
        [result_text] => 
        [order] => 1 
    ) 
    [6] => Array ( 
        [id] => 4e2825826d9137 
        [answer] => Dallas 
        [question_id_fk] => 4e2825826ca998 
        [correct] => 0 
        [score] => 0.00 
        [hot_answer] => 0 
        [hot_email] => 
        [ordering] => 1 
        [result_text] => 
        [order] => 1 ) 
)

 

这是问题列表

 Array ( 
[0] => 4e28258262d100
[1] => 4e282582649464
[2] => 4e28258265b752 
[3] => 4e282582674ba0
[4] => 4e282582689e80 )

    foreach($questionList as $question){
        // I want to Get answers in array above which 
        // has $question.question_id = question_id_fk . One question can have multiple
        // answers

//Print Each question Id 
//Print answer , result_text and correct values from all answers found from AnswerList

     }

如何从数组中搜索问题 id 的所有答案。我需要获得“正确”和“result_text”值作为答案。

php arrays multidimensional-array filter intersection
3个回答
2
投票
$matches = array_filter ($answerList, function ($answer) use ($question) {
  return $question['id'] == $answer['question_id_fk'];
});

现在您可以访问每个条目。

如果您想将结构简化为原始值数组(您正在寻找的值),您可以执行类似的操作

$correct = array_reduce(
  $matches, 
  function ($result, $current) {
    $result[] = $current['correct'];
    return $result;
  }, 
  array()
);

更新

我建议重新订购您的

$answerList

$answerListOrderedByQuestionId = array_reduce (
  $answerList, 
  function ($result, $answer) {
    if (!array_key_exists($answer['question_id_fk'], $result))
      $result[$answer['question_id_fk']] = array();

    $result[$answer['question_id_fk']][] = $answer;

    return $result;
  }, 
  array()
);

现在这应该是一个关联数组,键为问题 ID。现在您可以轻松访问给定问题的每个答案。


1
投票
foreach ($questionList as $question)
{
  if ($question['id'] == /*id we want to match*/)
  {
    // $question is now your match
    //   $question['correct']
    //   $queestion['result_text']
  }
}

如果我正确理解你的评论:

// go through each aquestion
foreach ($questionList as $question)
{
  // for each question, we want the answer associated with it
  foreach ($answerList as $answer)
  {
    // make sure the ids match up
    if ($answer['question_id_fk'] == $question)
    {
      // $question & $answer is now your pair
    }
  }
}

-1
投票

示例仅显示答案列表数组?

foreach ($questionList as $question)
{
  // for each question, look through the answers...
  foreach ($answerlist as $answer)
    if ($answer['question_id_fk'] == $question['id'])
    {
      // $answer matches the current question
    }
  }
}

另一方面,您可以将答案列表处理一次,放入由 Question_id_fk 索引的数组中,而不是在列表中搜索每个问题。

© www.soinside.com 2019 - 2024. All rights reserved.