foreach测试,如果尚未添加

时间:2014-07-22 01:20:07

标签: php loops foreach

我想知道如何在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'];
}

提前感谢您的友好帮助:)

2 个答案:

答案 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'],
    );
}