我重新格式化了这个问题,希望此question的重复标记将被更改,因为该答案不会达到此需求的程度。目前尚不清楚如何超越包含所有章节的第一节,另一个问题解释了如何做。
我试图首先按SECTION
分组,然后按该部分的所有CHAPTERS
分组,然后按每一章中的所有PAGES
分组。希望可以有人帮帮我。
这是我从MySQL中用PHP返回的结果:
Array
(
[0] => Array
(
[PageId] => 1
[BookSection] => Section 1
[ChapterNumber] => 1
[ChapterTitle] => Chapter 1
[PageNumber] => 1
[PageText] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageIsFree] => 1
[PageAudioUrl] => http://cloudfront.net/mp3/books/1.mp3
)
[1] => Array
(
[PageId] => 2
[BookSection] => Section 1
[ChapterNumber] => 1
[ChapterTitle] => Chapter 1
[PageNumber] => 2
[PageText] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageIsFree] => 1
[PageAudioUrl] => http://cloudfront.net/mp3/books/2.mp3
)
[2] => Array
(
[PageId] => 3
[BookSection] => Section 1
[ChapterNumber] => 1
[ChapterTitle] => Chapter 1
[PageNumber] => 3
[PageText] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageIsFree] => 1
[PageAudioUrl] => http://cloudfront.net/mp3/books/3.mp3
)
[3] => Array
(
[PageId] => 4
[BookSection] => Section 1
[ChapterNumber] => 2
[ChapterTitle] => Chapter 2
[PageNumber] => 4
[PageText] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/4.mp3
)
[4] => Array
(
[PageId] => 5
[BookSection] => Section 1
[ChapterNumber] => 2
[ChapterTitle] => Chapter 2
[PageNumber] => 5
[PageText] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/5.mp3
)
[5] => Array
(
[PageId] => 6
[BookSection] => Section 2
[ChapterNumber] => 1
[ChapterTitle] => Chapter 1
[PageNumber] => 6
[PageText] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/6.mp3
)
[6] => Array
(
[PageId] => 7
[BookSection] => Section 2
[ChapterNumber] => 1
[ChapterTitle] => Chapter 1
[PageNumber] => 7
[PageText] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/7.mp3
)
[7] => Array
(
[PageId] => 8
[BookSection] => Section 2
[ChapterNumber] => 2
[ChapterTitle] => Chapter 2
[PageNumber] => 8
[PageText] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/8.mp3
)
[8] => Array
(
[PageId] => 9
[BookSection] => Section 2
[ChapterNumber] => 2
[ChapterTitle] => Chapter 2
[PageNumber] => 9
[PageText] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/9.mp3
)
[9] => Array
(
[PageId] => 10
[BookSection] => Section 2
[ChapterNumber] => 2
[ChapterTitle] => Chapter 2
[PageNumber] => 10
[PageText] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/10.mp3
)
[10] => Array
(
[PageId] => 11
[BookSection] => Section 3
[ChapterNumber] => 1
[ChapterTitle] => Chapter 1
[PageNumber] => 11
[PageText] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/11.mp3
)
[11] => Array
(
[PageId] => 12
[BookSection] => Section 3
[ChapterNumber] => 1
[ChapterTitle] => Chapter 1
[PageNumber] => 12
[PageText] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/12.mp3
)
[12] => Array
(
[PageId] => 13
[BookSection] => Section 3
[ChapterNumber] => 1
[ChapterTitle] => Chapter 1
[PageNumber] => 13
[PageText] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/13.mp3
)
)
我正在尝试格式化数组,使其看起来像这样:
[0] => Array
(
[SectionName] => Section 1
[Chapters] => Array
(
[0] => Array
(
[ChapterTitle] => Chapter 1
[ChapterNumber] => 1
[Pages] => Array
(
[0] => Array
(
[PageId] => 1
[PageText] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageNumber] => 1
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/1.mp3
}
[1] => Array
(
[PageId] => 2
[PageText] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageNumber] => 2
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/2.mp3
}
[2] => Array
(
[PageId] => 3
[PageText] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageNumber] => 3
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/3.mp3
)
)
)
[1] => Array
(
[ChapterTitle] => Chapter 2
[ChapterNumber] => 2
[Pages] => Array
(
[0] => Array
(
[PageId] => 4
[PageText] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageNumber] => 4
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/4.mp3
}
[1] => Array
(
[PageId] => 5
[PageText] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageNumber] => 5
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/5.mp3
}
[2] => Array
(
[PageId] => 6
[PageText] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageNumber] => 6
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/6.mp3
)
)
)
)
[1] => Array
(
[SectionName] => Section 2
[Chapters] => Array
(
[0] => Array
(
[ChapterTitle] => Chapter 1
[ChapterNumber] => 1
[Pages] => Array
(
[0] => Array
(
[PageId] => 7
[PageText] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageNumber] => 1
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/7.mp3
}
[1] => Array
(
[PageId] => 8
[PageText] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageNumber] => 2
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/8.mp3
}
[2] => Array
(
[PageId] => 9
[PageText] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageNumber] => 3
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/9.mp3
)
)
)
[1] => Array
(
[ChapterTitle] => Chapter 2
[ChapterNumber] => 2
[Pages] => Array
(
[0] => Array
(
[PageId] => 10
[PageText] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageNumber] => 4
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/10.mp3
}
[1] => Array
(
[PageId] => 11
[PageText] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageNumber] => 5
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/11.mp3
}
[2] => Array
(
[PageId] => 12
[PageText] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageNumber] => 6
[PageIsFree] => 0
[PageAudioUrl] => http://cloudfront.net/mp3/books/12.mp3
)
)
)
)
我尝试了几种解决方案,这是我得到的最接近的解决方案,但是结果中的分组是分开的:
foreach ($book_content as $record) {
$temp_array['SectionName'][] = $record['BookSection'];
$temp_array['Chapters'][] = array('ChapterTitle' => $record['ChapterTitle']);
$temp_array['Chapters']['Pages'][] = $record;
}
echo '<pre>'; print_r($temp_array);
die();
哪个给我:
Array
(
[0] => Array
(
[SectionName] => Array
(
[0] => Section 1
[1] => Section 1
[2] => Section 1
[3] => Section 1
[4] => Section 1
[5] => Section 2
[6] => Section 2
[7] => Section 2
[8] => Section 2
[9] => Section 2
[10] => Section 3
[11] => Section 3
[12] => Section 3
)
[Chapters] => Array
(
[0] => Array
(
[ChapterTitle] => Chapter 1
)
[1] => Array
(
[ChapterTitle] => Chapter 1
)
[2] => Array
(
[ChapterTitle] => Chapter 1
)
[3] => Array
(
[ChapterTitle] => Chapter 2
)
[4] => Array
(
[ChapterTitle] => Chapter 2
)
[5] => Array
(
[ChapterTitle] => Chapter 1
)
[6] => Array
(
[ChapterTitle] => Chapter 1
)
[7] => Array
(
[ChapterTitle] => Chapter 2
)
[8] => Array
(
[ChapterTitle] => Chapter 2
)
[9] => Array
(
[ChapterTitle] => Chapter 2
)
[10] => Array
(
[ChapterTitle] => Chapter 1
)
[11] => Array
(
[ChapterTitle] => Chapter 1
)
[12] => Array
(
[ChapterTitle] => Chapter 1
)
)
[Pages] => Array
(
[0] => Array
(
[PageId] => 1
[BookSection] => Section 1
[ChapterNumber] => 1
[ChapterTitle] => Chapter 1
[PageNumber] => 1
[PageText] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageIsFree] => 1
[PageAudioUrl] => http://d2q6xzim332bmh.cloudfront.net/mp3/books/1.mp3
)
[1] => Array
(
[PageId] => 2
[BookSection] => Section 1
[ChapterNumber] => 1
[ChapterTitle] => Chapter 1
[PageNumber] => 2
[PageText] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageIsFree] => 1
[PageAudioUrl] => http://d2q6xzim332bmh.cloudfront.net/mp3/books/2.mp3
)
[2] => Array
(
[PageId] => 3
[BookSection] => Section 1
[ChapterNumber] => 1
[ChapterTitle] => Chapter 1
[PageNumber] => 3
[PageText] =>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam rutrum enim ac massa feugiat aliquam. Curabitur molestie sit amet ipsum sed accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
[PageIsFree] => 1
[PageAudioUrl] => http://d2q6xzim332bmh.cloudfront.net/mp3/books/3.mp3
)
)
)
第二次尝试使我拥有正确的结构,但未对相似值进行分组。换句话说,每次在第1节>第1章中包含页面时,该页面都会显示为唯一数组,而不是在第1节>第1章数组中分组。
$temp_array = array();
$i = 0;
foreach ($book_content as $record) {
$temp_array[$i]['SectionName'] = $record['BookSection'];
$temp_array[$i]['Chapters'][$i]['ChapterTitle'] = $record['ChapterTitle'];
$temp_array[$i]['Chapters'][$i]['Pages'][$i] = $record;
$i++;
}
答案 0 :(得分:1)
您需要使用以节名称和章号为关键字的关联数组,以便可以将这些相关行分组在一起。您只是在结果中为原始数组中的每个元素添加一个新元素,而不会进行任何重新组合。
您遍历原始数组,检查结果中是否已存在该节或章的条目。如果没有,请为其添加一个初始条目,然后在其中填写详细信息。
$result = array();
foreach ($book_content as $record) {
$section = $record['BookSection'];
if (!isset($result[$section])) {
// Create initial entry for this section
$result[$section] = array(
'SectionName' => $section,
'Chapters' => array());
}
$chapter = $record['ChapterNumber']
if (!isset($result[$section]['Chapters'][$chapter])) {
// Create initial entry for this chapter
$result[$section]['Chapters'][$chapter] = array(
'ChapterNumber' => $chapter,
'ChapterTitle' => $record['ChapterTitle'],
'Pages' => array());
}
// Add record for this page
$result[$section]['Chapters'][$chapter]['Pages'][] = array(
'PageID' => $record['PageID'],
'PageText' => $record['PageText'],
'PageNumber' => $record['PageNumber'],
'PageIsFree' => $record['PageIsFree'],
'PageAudioUrl' => $record['PageAudioUrl']));
}
其结果将是一个关联数组而不是索引。如果需要将其编入索引,则可以使用array_values()
:
$result = array_values($result);
foreach ($result as &$section) {
$section['Chapters'] = array_values($section['Chapters'];
}
unset($section); // Break the reference variable link
别忘了&
中的foreach
,它使$section
成为引用,因此分配给它会影响您要遍历的数组。