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.
精彩评论