遍历一个数组并在另一个多维数组的子数组中查找值
Loop through one array and find value in a subarray of a different multidimensional array
我在用头撞墙!
我有两个数组:
$questionArray = Array(
[0] => Array
(
[QueID] => 53
[QueType] => Map question
[QueText] => Where do you live?
)
[1] => Array
(
[QueID] => 55
[QueType] => Multi selection
[QueText] => What's your favorite car?
)
[2] => Array
(
[QueID] => 59
[QueType] => Multi selection
[QueText] => What's your favorite fruit?
)
[3] => Array
(
[QueID] => 54
[QueType] => Single selection
[QueText] => What's your favorite color?
)
)
$answerArray = Array(
[52264f64c9482] => Array
(
[0] => Array
(
[QueID] => 53
[QueType] => Map question
[Lat] => 41.86
[Lng] => -87.77
[AnsText] =>
)
[1] => Array
(
[QueID] => 55
[QueType] => Multi selection
[Lat] =>
[Lng] =>
[AnsText] => Chevy
)
[2] => Array
(
[QueID] => 54
[QueType] => Single selection
[Lat] =>
[Lng] =>
[AnsText] => Green
)
)
[522a522e9f41f] => Array
(
[0] => Array
(
[QueID] => 53
[QueType] => Map question
[Lat] => 51.41
[Lng] => -27.21
[AnsText] =>
)
[1] => Array
(
[QueID] => 55
[QueType] => Multi selection
[Lat] =>
[Lng] =>
[AnsText] => Ford
)
[2] => Array
(
[QueID] => 59
[QueType] => Multi selection
[Lat] =>
[Lng] =>
[AnsText] => Banana
)
)
[522a527ec0115] => Array
(
[0] => Array
(
[QueID] => 54
[QueType] => Single selection
[Lat] =>
[Lng] =>
[AnsText] => Blue
)
)
)
我正在尝试遍历 $answerArray 中的每个数组,然后为 $questionArray 中的每个问题数组显示答案,如果 $answerArray 的子数组中有答案,或者如果 $answerArray 的子数组中没有匹配的答案$answerArray return 一个 "No answer" 值。因此,如果脚本有效,它将采用上面的两个数组和 return:
你住在哪里?:
纬度 - 41.86
液化天然气 - -87.77
你最喜欢什么车? - 雪佛兰
你最喜欢的水果是什么? - 无人接听
你最喜欢什么颜色? - 绿色
你住在哪里?:
纬度 - 51.41
Lng - -27.21
你最喜欢什么车? - 福特
你最喜欢的水果是什么? - 香蕉
你最喜欢什么颜色? - 没有答案
你住在哪里?:
纬度 - 无人接听
Lng - 无人接听
你最喜欢什么车? - 无人接听
你最喜欢的水果是什么? - 无人接听
你最喜欢什么颜色? - 蓝色
我一事无成,我最接近的是:
foreach ($answerArray as $ansArray) {
foreach ($questionArray as $queArray) {
foreach ($ansArray as $ansItemArray) {
if ($ansItemArray['QueID'] == $queArray['QueID']) {
$result = $ansItemArray;
if ($result['SQueType']== 'Map question') {
echo $ansItemArray['QueText'].' - '.$result['Lat'].'</br>';
echo $ansItemArray['QueText'].' - '.$result['Lng'].'</br>';
} else {
echo $ansItemArray['QueText'].' - '.$result['AnsText'].'</br>';
}
} else {
$result = array();
if ($result['SQueType']== 'Map question') {
echo $ansItemArray['QueText'].' - No Answer</br>';
echo $ansItemArray['QueText'].' - No Answer</br>';
} else {
echo $ansItemArray['QueText'].' - No Answer</br>';
}
}
}
}
echo '</br></br>';
}
如有任何帮助,我们将不胜感激。
必填:
- 格式化用户提供的答案
- 指出用户未回答的问题
基本上,它是 'supplied answers' 的单传。
我们需要指出哪些问题没有得到回答。我这样做的方法是对所有问题进行 'state vector',并在回答时取消设置。报告剩余的。
工作代码:CodePad.org
驾驶代码:
foreach ($answerArray as $id => $oneSetOfAnswers) {
$unasweredQuestions = array(); // need a copy as it is a 'state vector'
// of 'processed questions for this individual.
foreach($questionArray as $oneQuestion) {
$unasweredQuestions[$oneQuestion['ueID']] = $oneQuestion;
}
// process the answers...
echo '<br />', '[' . $id . ']';
foreach ($oneSetOfAnswers as $id => $oneAnswer) {
$queId = $oneAnswer['QueID'];
$theAnswers = getAnswer($unasweredQuestions[$queId], $oneAnswer);
// remove from the list
unset($unasweredQuestions[$queId]);
// show answers
foreach($theAnswers as $oneLine) {
echo '<br />', $oneLine;
}
}
// show the unansweredQuestions
foreach ($unasweredQuestions as $question) {
echo '<br />', $question['ueText'] .' : no answer supplied.';
}
}
提取一个问题的答案的功能。
/**
*
* @param type $question
* @param type $oneAnswer
* @return array ready to print
*/
function getAnswer($question, $oneAnswer)
{
$useAnsText = strpos(strtolower($question['ueType']), 'multi') !== false
|| strpos(strtolower($question['ueType']), 'single') !== false;
$q = $question['ueText'];
if ($useAnsText) {
return array($q . ' : '. $oneAnswer['AnsText']);
}
// ignore standard stuff and assume whatever remains is wanted
$ignore = array('AnsText', 'QueID', 'QueType');
$answer = array($q);
foreach($oneAnswer as $id => $response) {
if (in_array($id, $ignore)) {
continue;
}
$answer[] = $id .' : '. $response;
}
return $answer;
}
我在用头撞墙!
我有两个数组:
$questionArray = Array(
[0] => Array
(
[QueID] => 53
[QueType] => Map question
[QueText] => Where do you live?
)
[1] => Array
(
[QueID] => 55
[QueType] => Multi selection
[QueText] => What's your favorite car?
)
[2] => Array
(
[QueID] => 59
[QueType] => Multi selection
[QueText] => What's your favorite fruit?
)
[3] => Array
(
[QueID] => 54
[QueType] => Single selection
[QueText] => What's your favorite color?
)
)
$answerArray = Array(
[52264f64c9482] => Array
(
[0] => Array
(
[QueID] => 53
[QueType] => Map question
[Lat] => 41.86
[Lng] => -87.77
[AnsText] =>
)
[1] => Array
(
[QueID] => 55
[QueType] => Multi selection
[Lat] =>
[Lng] =>
[AnsText] => Chevy
)
[2] => Array
(
[QueID] => 54
[QueType] => Single selection
[Lat] =>
[Lng] =>
[AnsText] => Green
)
)
[522a522e9f41f] => Array
(
[0] => Array
(
[QueID] => 53
[QueType] => Map question
[Lat] => 51.41
[Lng] => -27.21
[AnsText] =>
)
[1] => Array
(
[QueID] => 55
[QueType] => Multi selection
[Lat] =>
[Lng] =>
[AnsText] => Ford
)
[2] => Array
(
[QueID] => 59
[QueType] => Multi selection
[Lat] =>
[Lng] =>
[AnsText] => Banana
)
)
[522a527ec0115] => Array
(
[0] => Array
(
[QueID] => 54
[QueType] => Single selection
[Lat] =>
[Lng] =>
[AnsText] => Blue
)
)
)
我正在尝试遍历 $answerArray 中的每个数组,然后为 $questionArray 中的每个问题数组显示答案,如果 $answerArray 的子数组中有答案,或者如果 $answerArray 的子数组中没有匹配的答案$answerArray return 一个 "No answer" 值。因此,如果脚本有效,它将采用上面的两个数组和 return:
你住在哪里?:
纬度 - 41.86
液化天然气 - -87.77
你最喜欢什么车? - 雪佛兰
你最喜欢的水果是什么? - 无人接听
你最喜欢什么颜色? - 绿色
你住在哪里?:
纬度 - 51.41
Lng - -27.21
你最喜欢什么车? - 福特
你最喜欢的水果是什么? - 香蕉
你最喜欢什么颜色? - 没有答案
你住在哪里?:
纬度 - 无人接听
Lng - 无人接听
你最喜欢什么车? - 无人接听
你最喜欢的水果是什么? - 无人接听
你最喜欢什么颜色? - 蓝色
我一事无成,我最接近的是:
foreach ($answerArray as $ansArray) {
foreach ($questionArray as $queArray) {
foreach ($ansArray as $ansItemArray) {
if ($ansItemArray['QueID'] == $queArray['QueID']) {
$result = $ansItemArray;
if ($result['SQueType']== 'Map question') {
echo $ansItemArray['QueText'].' - '.$result['Lat'].'</br>';
echo $ansItemArray['QueText'].' - '.$result['Lng'].'</br>';
} else {
echo $ansItemArray['QueText'].' - '.$result['AnsText'].'</br>';
}
} else {
$result = array();
if ($result['SQueType']== 'Map question') {
echo $ansItemArray['QueText'].' - No Answer</br>';
echo $ansItemArray['QueText'].' - No Answer</br>';
} else {
echo $ansItemArray['QueText'].' - No Answer</br>';
}
}
}
}
echo '</br></br>';
}
如有任何帮助,我们将不胜感激。
必填:
- 格式化用户提供的答案
- 指出用户未回答的问题
基本上,它是 'supplied answers' 的单传。
我们需要指出哪些问题没有得到回答。我这样做的方法是对所有问题进行 'state vector',并在回答时取消设置。报告剩余的。
工作代码:CodePad.org
驾驶代码:
foreach ($answerArray as $id => $oneSetOfAnswers) {
$unasweredQuestions = array(); // need a copy as it is a 'state vector'
// of 'processed questions for this individual.
foreach($questionArray as $oneQuestion) {
$unasweredQuestions[$oneQuestion['ueID']] = $oneQuestion;
}
// process the answers...
echo '<br />', '[' . $id . ']';
foreach ($oneSetOfAnswers as $id => $oneAnswer) {
$queId = $oneAnswer['QueID'];
$theAnswers = getAnswer($unasweredQuestions[$queId], $oneAnswer);
// remove from the list
unset($unasweredQuestions[$queId]);
// show answers
foreach($theAnswers as $oneLine) {
echo '<br />', $oneLine;
}
}
// show the unansweredQuestions
foreach ($unasweredQuestions as $question) {
echo '<br />', $question['ueText'] .' : no answer supplied.';
}
}
提取一个问题的答案的功能。
/**
*
* @param type $question
* @param type $oneAnswer
* @return array ready to print
*/
function getAnswer($question, $oneAnswer)
{
$useAnsText = strpos(strtolower($question['ueType']), 'multi') !== false
|| strpos(strtolower($question['ueType']), 'single') !== false;
$q = $question['ueText'];
if ($useAnsText) {
return array($q . ' : '. $oneAnswer['AnsText']);
}
// ignore standard stuff and assume whatever remains is wanted
$ignore = array('AnsText', 'QueID', 'QueType');
$answer = array($q);
foreach($oneAnswer as $id => $response) {
if (in_array($id, $ignore)) {
continue;
}
$answer[] = $id .' : '. $response;
}
return $answer;
}