开发者

Search Array PHP

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 开发者_Go百科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 .


$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.


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


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜