php数组,过滤数组时出错,并且该值不存在



我正在尝试使用isset来检查$filtered_data是否返回一组数据。

我使用这个代码而不是foreach,因为datasetID是一个唯一的id。

我的新手理解是if (isset($filtered_data))返回true还是false?因此,ifmran表示如果返回记录,则执行x。所以,目前当我输入$lastPart = '5fd4058e5c8d2'时,我得到了预期的结果。当我将2更改为3(不存在的ID($lastPart = '5fd4058e5c8d3'时,我得到未定义的索引:5fd4058e5c8d3`。

我希望isset正在完成它的工作,并且错误被抛出到这一行,如错误消息$filtered_data = array_column(array_merge(...$data), null, 'datasetID')[$lastPart];所示。我是否错过了显而易见的内容?如果数组中不存在值$lastPart,我想这需要一个get out子句?

$filtered_data = array_column(array_merge(...$data), null, 'datasetID')[$lastPart];
if (isset($filtered_data)){
echo 'qwertyuio';
$datasetID = $filtered_data['datasetID'];
$collectionCode = $filtered_data['collectionCode'];
$datasetName = $filtered_data['datasetName'];
$ownerInstitutionCode = $filtered_data['ownerInstitutionCode'];
$vernacularName = $filtered_data['vernacularName'];
$elementName = strtolower($filtered_data['elementName']);
} else {
echo 'not set';
}

一个快速解决方案是使用null合并(??(并将值设置为伪值,如果找不到,则可以重新处理isset()以检查伪值。。。

$filtered_data = array_column(array_merge(...$data), null, 'datasetID')[$lastPart] 
?? null;
if ($filtered_data){

您忽略了一个显而易见的问题:当您将一个不存在的元素分配给$filtered_data时,您正试图访问它,因此错误发生在那里。直到下一行,你才开始测试它的存在。

试试这个:

$filtered_data = array_column(array_merge(...$data), null, 'datasetID');
if (isset($filtered_data[$lastPart]) {
$filtered_data = $filtered_data[$lastPart];
echo 'qwertyuio';
$datasetID = $filtered_data['datasetID'];
$collectionCode = $filtered_data['collectionCode'];
$datasetName = $filtered_data['datasetName'];
$ownerInstitutionCode = $filtered_data['ownerInstitutionCode'];
$vernacularName = $filtered_data['vernacularName'];
$elementName = strtolower($filtered_data['elementName']);
} else {
echo 'not set';
}

相关内容

  • 没有找到相关文章

最新更新