我有一个这样的数组:
$survey = array(
'Category1' => array(
'Question1' => array(
'Option1', 'Option2', 'Option3'
),
'Question2' => array(
'Option1', 'Option2', 'Option3'
)
),
'Category2' => array(
'Question1' => array(
'Option1', 'Option2', 'Option3'
),
'Question2' => array(
'Option1', 'Option2', 'Option3'
)
)
);
这个阵列实际上要大得多。要求是每页3个问题。我的想法是存储我目前所处的类别和问题。例如,类别0,问题2.然后检查是否array_key_exists
,如果是,则显示,如果没有,则递增并再次尝试。正如您可能已经猜到的那样,类别和问题没有键(至少不是数字键我可以循环使用)。因此,据我所知,使用索引是不可能的。例如,如何在每页动态显示3个问题并自动获取下一页的后3个问题,而不知道类别2的值是什么。我该如何遍历/定位?
谢谢, 莱恩
答案 0 :(得分:0)
数据似乎相当静态,所以我建议更改数据格式:)
将数组更改为:
$survey = array(
array( 'name' = > 'Category1',
'questions' => array(
array(
'name' => 'Question1',
'opts' => array(
'Option1', 'Option2', 'Option3'
)
),
array(
'name' => 'Question2',
'opts' => array(
'Option1', 'Option2', 'Option3'
)
)
),
array( 'name' = > 'Category2',
'questions' => array(
array(
'name' => 'Question1',
'opts' => array(
'Option1', 'Option2', 'Option3'
)
),
array(
'name' => 'Question2',
'opts' => array(
'Option1', 'Option2', 'Option3'
)
)
)
);
然后你可以使用整数索引。只需记住2个数字(类别索引和类别中的问题索引。在每种情况下只增加到数组末尾。
Php不是我最强的语言,所以上面的代码对于本机php程序员来说可能看起来很奇怪。然而,OP困难的根本原因是无法轻松创建交互器类型对象。这是因为基于密钥的数组具有由其哈希映射性质给出的“奇怪”顺序。改变本质并允许自己构建类似于对象的交互器(也称为数组索引)。
答案 1 :(得分:0)
由于您正在使用关联数组(也就是哈希),因此没有顺序。每个问题和每个类别都需要有下一个问题/类别密钥。之后,请参阅链接列表算法。
答案 2 :(得分:0)
我的array_keys()
功能对您有帮助吗?您将迭代键数组(以获取下一个键)。
答案 3 :(得分:0)
<?php
$survey = array(
'Category1' => array(
'Question1' => array(
'Option1', 'Option2', 'Option3'
),
'Question2' => array(
'Option1', 'Option2', 'Option3'
),
'Question3' => array(
'Option1', 'Option2', 'Option3'
),
'Question4' => array(
'Option1', 'Option2', 'Option3'
)
),
'Category 2' => array(
'Question1' => array(
'Option1', 'Option2', 'Option3'
),
'Question2' => array(
'Option1', 'Option2', 'Option3'
)
),
'Category 3' => array(
'Question1' => array(
'Option1', 'Option2', 'Option3'
),
'Question2' => array(
'Option1', 'Option2', 'Option3'
),
'Question3' => array(
'Option1', 'Option2', 'Option3'
),
)
);
function fetchQuestions($survey, $page, $perPage = 3)
{
$results = Array();
$nCount = 0; $nRead = 0; $nIndex = $page * $perPage;
foreach ($survey as $CategoryName => $Questions)
{
foreach ($Questions as $Question => $Options)
{
if ($nCount >= $nIndex && $nRead < $perPage)
{
if (!isset($results[$CategoryName]))
$results[$CategoryName] = Array();
$results[$CategoryName][$Question] = $Options;
$nRead++;
}
$nCount++;
}
}
return $results;
}
echo '<html><body><pre>';
var_dump(fetchQuestions($survey,0));
var_dump(fetchQuestions($survey,1));
var_dump(fetchQuestions($survey,2));
echo '</pre></body></html>';
&GT;
输出:
array(1) {
["Category1"]=>
array(3) {
["Question1"]=>
array(3) {
[0]=>
string(7) "Option1"
[1]=>
string(7) "Option2"
[2]=>
string(7) "Option3"
}
["Question2"]=>
array(3) {
[0]=>
string(7) "Option1"
[1]=>
string(7) "Option2"
[2]=>
string(7) "Option3"
}
["Question3"]=>
array(3) {
[0]=>
string(7) "Option1"
[1]=>
string(7) "Option2"
[2]=>
string(7) "Option3"
}
}
}
array(2) {
["Category1"]=>
array(1) {
["Question4"]=>
array(3) {
[0]=>
string(7) "Option1"
[1]=>
string(7) "Option2"
[2]=>
string(7) "Option3"
}
}
["Category 2"]=>
array(2) {
["Question1"]=>
array(3) {
[0]=>
string(7) "Option1"
[1]=>
string(7) "Option2"
[2]=>
string(7) "Option3"
}
["Question2"]=>
array(3) {
[0]=>
string(7) "Option1"
[1]=>
string(7) "Option2"
[2]=>
string(7) "Option3"
}
}
}
array(1) {
["Category 3"]=>
array(3) {
["Question1"]=>
array(3) {
[0]=>
string(7) "Option1"
[1]=>
string(7) "Option2"
[2]=>
string(7) "Option3"
}
["Question2"]=>
array(3) {
[0]=>
string(7) "Option1"
[1]=>
string(7) "Option2"
[2]=>
string(7) "Option3"
}
["Question3"]=>
array(3) {
[0]=>
string(7) "Option1"
[1]=>
string(7) "Option2"
[2]=>
string(7) "Option3"
}
}
}
这是我的出价。返回一个类似于原始数组的数组,其中包含应该在该特定页面上显示的问题。
如果您想要更直观的表示:
echo '<html><body>';
$page = 0;
while (count($matches = fetchQuestions($survey,$page++)) > 0)
{
echo '<div style="background-color:#CCC;">';
echo '<h2>Page '.$page.'</h2>';
echo '<ul>';
foreach ($matches as $Category => $Questions)
{
echo '<li><strong>'.$Category.'</strong>:<ul>';
foreach ($Questions as $Question => $Options)
{
echo '<li><u>'.$Question.'</u><ul>';
foreach ($Options as $Option)
echo '<li>'.$Option.'</li>';
echo '</ul>';
}
echo '</ul></li>';
}
echo '</ul>';
echo '</div>';
}
echo '</body></html>';