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

发布于 2024-11-25 08:28:57 字数 2826 浏览 2 评论 0原文

我有以下情况

我有 2 个 arrys

以下是答案数组

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”值。

I have following situation

I have 2 arrys

Following is answers array

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 ) 
)

 

Here is Question List

 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

     }

How do I search all answers for a question id from array . I need to get "correct" and "result_text" values for an answer .

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

兰花执着 2024-12-02 08:28:57
$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。现在您可以轻松访问给定问题的每个答案。

$matches = array_filter ($answerList, function ($answer) use ($question) {
  return $question['id'] == $answer['question_id_fk'];
});

Now you can access every single entry.

If you want to reduce the structures to an array of primtive values (the values you are looking for) you ca do something like

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

Update

I would suggest to reorder your $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()
);

This should now be an associative array with the key the question-id. Now you can easily access every single answer for a given question.

简单爱 2024-12-02 08:28:57
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
    }
  }
}
foreach ($questionList as $question)
{
  if ($question['id'] == /*id we want to match*/)
  {
    // $question is now your match
    //   $question['correct']
    //   $queestion['result_text']
  }
}

If I understand your comment correctly:

// 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
    }
  }
}
痴骨ら 2024-12-02 08:28:57

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

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
    }
  }
}

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

The example only shows the answerlist array?

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
    }
  }
}

On the other hand, you could process answerlist once, into an array indexed by question_id_fk, rather than searching the list for each question.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文