Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php foreach测试(如果尚未添加)_Php_Loops_Foreach - Fatal编程技术网

Php foreach测试(如果尚未添加)

Php foreach测试(如果尚未添加),php,loops,foreach,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中添加比较并转到下一项。 如果之前已经添加了实际数据测试,或者如果它是空的,我希望这个循环转到下一个数据

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'];
}

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

您的问题似乎是

如果(数组键存在($track['id',$id))

因为你传递的是值而不是键。键是
$i
,因此第二行应该是

如果(数组\键\存在($i,$id)){

另一方面,我通常使用

if(isset($id[$i]))
if(!empty($id[$i]))


因为我发现它更具可读性。

您的
$id
数组基于索引而不是id存储值;不过,这应该是可行的:

if (in_array($track['id'], $id)) {
    continue;
}
这不是很有效,尽管对于相对较小的数据集,O(n)搜索仍然应该是可管理的

P>可选的,考虑这样的事情:

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

什么是
$tracks
,您试图实现的目标的更大上下文是什么?代码有什么不起作用?还有什么是
$id
?请注意,将数据分离为单独的变量不是一个好主意。@Dan track来自于对json文件的解析,该文件重新组合了许多歌曲。如果用于填充数组,则此foreach为了最近在那里回音,但是有很多歌曲被发布了很多次,所以我想在这次foreach中做一个测试,以消除重复或没有艺术作品的歌曲。这是为这个网站:/我正在解析来自soundcloud的json文件。
isset
!empty
不是同一件事。我想你已经成功了答案很简单。我认为你的答案完全正确,但我尝试了你的解决方案,但它仍然无法过滤:/@DaveChen,是的,这就是为什么我说“或”,这取决于我需要它做什么。假设一个数组以空的
$id
数组开始,每次传递
$id[$I]
尚未定义,因此此代码永远无法工作。使用此解决方案,您必须确保
$track['id']
是唯一的。@Sarke,这不是OP试图对那些
continue;
语句所做的吗?除非我特别需要它,否则我通常避免使用数组中的
,在这种情况下,我们寻找的是键而不是值。但是,对于第二个代码块中的一个赋值,它不需要检查,因为它只会覆盖如果它是同一个id,请输入它。我会这样做。@Sarke否,您要查找的值不是存储在
$id
的键中,而是存储在数组()中的its值中;因此,
@Sarke如果相同id的第一首和最后一首曲目之间存在差异,则需要进行检查。我无法判断是否存在差异,因此最安全的假设是遵循OP的逻辑。