我想知道如何在foreach中添加比较并转到下一个项目。 如果之前已经添加了实际数据测试或者它是空的
,我希望这个循环转到下一个数据foreach ($tracks as $i => $track) {
$id[$i]=$track['id'];
$title[$i]=$track['title'];
$genre[$i]=$track['genre'];
$artwork[$i]=$track['artwork_url'];
}
我想到了这一点,但它没有用。
foreach ($tracks as $i => $track) {
if (array_key_exists($track['id'],$id)){
continue;
}
if (empty($track['artwork_url'])){
continue;
}
$id[$i]=$track['id'];
$title[$i]=$track['title'];
$genre[$i]=$track['genre'];
$artwork[$i]=$track['artwork_url'];
}
提前感谢您的友好帮助:)
答案 0 :(得分:1)
您的问题似乎是
if (array_key_exists($track['id'],$id))
因为您传递了值而不是密钥。关键是$i
,所以第二行应该是
if (array_key_exists($i,$id)){
另一方面,我通常使用
if (isset($id[$i]))
或if (!empty($id[$i]))
因为我发现它更具可读性。
答案 1 :(得分:1)
您的$id
数组根据索引存储值,而不是id;但这应该有用:
if (in_array($track['id'], $id)) {
continue;
}
这不是非常有效,但对于相对较小的数据集,O(n)搜索仍然应该是可管理的。
或者,考虑这样的事情:
$result = [];
foreach ($tracks as $track) {
if (isset($result[$track['id']]) || empty($track['artwork_url'])) {
continue;
}
$result[$track['id']] = array(
'id' => $track['id'],
'title' => $track['title'],
'genre' => $track['genre'],
'artwork' => $track['artwork_url'],
);
}