越来越接近我的问题的解决方案......但现在我再次陷入困境。
我正在尝试返回链接到帖子的所有音频附件。每个帖子都有一个.ogg和一个.mp3文件。每个文件都是Wordpress对象。因此.ogg和.mp3文件的单独对象。所以我回复了他们的“post_parent”#39;值并使用它来链接它们。我使用这个&post; parent'作为我的数组中的一个键。它有效,但不像我想要它。
这是 $ attachments (不完整,我删除了foreach循环中使用的非重要键)。您可以看到每个文件是独立的,所以我必须将它们自己链接到[post_parent],如您所见,有4个文件,但有2个不同的轨道。 ID不同,但[post_parent]是相同的:
[13] => WP_Post Object (
[ID] => 18619
[post_title] => IanEwing - Beauty
[post_parent] => 18612
[guid] => http://www.moovmnt.com/wp-content/uploads/2015/02/IanEwing-Beauty.ogg
[post_type] => attachment
[post_mime_type] => audio/ogg
)
[14] => WP_Post Object (
[ID] => 18618
[post_title] => IanEwing - Beauty
[post_parent] => 18612
[guid] => http://www.moovmnt.com/wp-content/uploads/2015/02/IanEwing-Beauty.mp3
[post_type] => attachment
[post_mime_type] => audio/mpeg
)
[15] => WP_Post Object (
[ID] => 18617
[post_title] => C Y G N - S U P E R N O V A
[post_parent] => 18612
[guid] => http://www.moovmnt.com/wp-content/uploads/2015/02/C-Y-G-N-S-U-P-E-R-N-O-V-A.ogg
[post_type] => attachment
[post_mime_type] => audio/ogg
)
[16] => WP_Post Object (
[ID] => 18616
[post_title] => C Y G N - S U P E R N O V A
[post_parent] => 18612
[guid] => http://www.moovmnt.com/wp-content/uploads/2015/02/C-Y-G-N-S-U-P-E-R-N-O-V-A.mp3
[post_type] => attachment
[post_mime_type] => audio/mpeg
)
这是我目前得到的,它实际上是正确的......
[18653] => Array (
[0] => Array (
[mp3] => 1.mp3
[ogg] => 1.ogg
)
)
[18612] => Array (
[0] => Array (
[ogg] => 2.ogg
[mp3] => 2.mp3
)
[1] => Array (
[ogg] => 3.ogg
[mp3] => 3.mp3
)
)
[18605] => Array (
[0] => Array (
[ogg] => 4.ogg
[mp3] => 4.mp3
)
)
[18592] => Array (
[0] => Array (
[ogg] => 5.ogg
[mp3] => 5.mp3
)
[1] => Array (
[ogg] => 6.ogg
[mp3] => 7.mp3
)
)
...但我的代码(在底部)无法执行此操作:
[18612] => Array (
[0] => Array (
[ogg] => 12.ogg
[mp3] => 12.mp3
)
[1] => Array (
[ogg] => 13.ogg
[mp3] => 13.mp3
)
[2] => Array (
[ogg] => 14.ogg
[mp3] => 14.mp3
)
[3] => Array (
[ogg] => 15.ogg
[mp3] => 15.mp3
)
)
这是我使用的代码。我知道,这很奇怪。我正在学习。
我的问题是,正如你所看到的,我使用数字0和1,我只是硬编码。但如果让我们说, 4 <它就不会起作用/ strong>帖子中的文件(如上面的示例)。第二个找到的文件后面的文件将替换 $ playlist_all [$ parent_id] [1] 。因此,不会创建 [2] 和 [3] 。而且我确切地知道为什么顺便说一句,但是我不知道如何检查这些东西是否在数组内部有一个键,如果是,则增加它。我知道循环和增量的东西...只是不知道它会如何工作...
同样,我知道我哪里出错了,但这是我能想到的唯一解决方案。我只是检查是否有[0],如果没有创建它。如果有[0],我创建[1]。
foreach ( $attachments as $attachment ) {
$parent_id = $attachment->post_parent;
$title = $attachment->post_title;
$type = $attachment->post_mime_type;
if ($type == 'audio/ogg') {
if (!$playlist_all[$parent_id][0]['ogg']) {
$playlist_all[$parent_id][0]['ogg'] = $attachment->guid;
} else {
$playlist_all[$parent_id][1]['ogg'] = $attachment->guid;
}
} elseif ($type == 'audio/mpeg') {
if (!$playlist_all[$parent_id][0]['mp3']) {
$playlist_all[$parent_id][0]['mp3'] = $attachment->guid;
} else {
$playlist_all[$parent_id][1]['mp3'] = $attachment->guid;
}
}
}
我希望它清晰明了,它的代码很混乱,但是我让它发挥作用。好吧,50%。
提前致谢。
答案 0 :(得分:1)
在第一个内部运行第二个foreach
循环,并调试$playlist
的内容。我非常确定你可以在数据库级别上做到这一点。
foreach ($attachments as $attachment) {
$parent_id = $attachment->post_parent;
$title = $attachment->post_title;
$type = $attachment->post_mime_type;
foreach ($playlist_all[$parent_id] as $playlist) {
if ($type == 'audio/ogg') {
// ...
} elseif ($type == 'audio/mpeg') {
// ...
}
}
}
答案 1 :(得分:1)
未经测试(没有数据很难做到),但这样的事情应该有效
foreach($attachments as $attachment) {
$parent_id = $attachment->post_parent;
$title = $attachment->post_title;
$type = $attachment->post_mime_type;
$ext = $type === 'audio/ogg' ? 'ogg' : 'mp3';
$arr = $playlist_all[$parent_id];
for ($i=0; $i<=count($arr); $i++) {
if (!(array_key_exists($i, $arr) && array_key_exists($ext, $arr[$i]))) {
$arr[$i][$ext] = $attachment->guid;
break;
}
}
}
它将数组中索引的数量加1,然后检查它们中的每一个,数组中不存在的最后一个数字将确保写入该值,但是如果有一个索引,文件扩展名没有t已经存在,而是写在那里,然后打破循环。