忽略PHP多维数组中不存在值名称的元素

忽略PHP多维数组中不存在值名称的元素,php,multidimensional-array,Php,Multidimensional Array,很抱歉,如果在下面使用了错误的术语,希望您理解我的意思。此外,请注意,这只是一项学习任务,并未实际使用 我有一些JSON数据,已经导入并解码到一个数组中。该数组是一个网店中大约20个不同产品的元素,具有多个值(id、名称、价格、库存、类别、折扣等)。我想根据姓名打印所有项目的列表。但是,其中一个元素没有名称。JSON数据中完全缺少“name”:“”,因此在我的数组中也是如此。所以,它不是空的,它只是不存在 我尝试过各种if函数(isset,!empty)并将usort和foreach放在if循环

很抱歉,如果在下面使用了错误的术语,希望您理解我的意思。此外,请注意,这只是一项学习任务,并未实际使用

我有一些JSON数据,已经导入并解码到一个数组中。该数组是一个网店中大约20个不同产品的元素,具有多个值(id、名称、价格、库存、类别、折扣等)。我想根据姓名打印所有项目的列表。但是,其中一个元素没有名称。JSON数据中完全缺少“name”:“”,因此在我的数组中也是如此。所以,它不是空的,它只是不存在

我尝试过各种if函数(isset,!empty)并将usort和foreach放在if循环中,但我相信我尝试过的函数要求特定的值名实际上存在,但没有设置,而且根本不存在

打印列表的代码示例:

echo "<table>
    <thead>
        <tr>
            <th>Name</th>
            <th>Price</th>
        </tr>
    </thead>
    <tbody>";
                        
            usort($product_data, fn($a,$b) => strcmp($a->name, $b->name) );
            foreach($product_data as $product) { 
            echo "<tr>";
            echo "<td>". $product->name ."</td>";
            echo "<td>". $product->price ."</td>";
            }
        }
            echo"</td>
            </tr>
    </tbody>
    </table>";
<pre>if(property_exists($product, 'name')){
 //put here your td
 echo "<td>". $product->name ."</td>";

}</pre>
echo”
名称
价格
";
usort($product_data,fn($a,$b)=>strcmp($a->name,$b->name));
foreach($product_数据作为$product){
回声“;
回显“$product->name.”;
回声“$product->price.”;
}
}
回声“
";
无论我做什么,我都会遇到这个错误: 注意:在[filename]中未定义的属性:stdClass::$name

我在想,一定有一种快速的方式可以说“如果‘名称’存在,那么就这样做(否则什么也不做)”,但根本找不到它。请帮忙

解决方案可能是

if(属性_存在($product,'name')){
//把你的td放在这里
回显“$product->name.”;
}

使用属性_exists(object,attribtue betwen引号)检查您正在获取的每个属性是否存在


这就像是
isset($product->name)$产品->名称:''

这是否回答了您的问题?首先,在没有“echo”。$product->name.“;”行的情况下执行代码。我想你会有同样的错误,但是$price,因为问题是你没有正确地调用字段。或者试试$product.name.So,这个
echo-isset($product->name)$产品->名称:''不工作?不确定如何正确调用字段tbh。我没有得到相同的错误与价格,所以相当肯定,它与名称不存在$product.name不起作用,“致命错误:未捕获错误:stdClass类的对象无法转换为C:\xampp\htdocs\index.php中的字符串:140堆栈跟踪:#0{main}在C:\xampp\htdocs\index.php中抛出”。但是可能与我的JSON工作有关<代码>$json_data=file_get_contents('./testapi.txt')
$response=json\u decode($json\u数据)
$product\u data=$response->products错误,isset应该在这里使用还是在其他地方使用<代码>回音“”。是否设置($product->name)$产品->名称:''如果在这里,则不起作用。谢谢,如果我将其放在foreach循环中,似乎效果很好。然而,我相信我的usort也有同样的问题(输出中有同样的错误,但是有4次可能是其他错误)。这仍然是ofc,因为它发生在循环之前。有没有提示如何在usort中排除该属性?由于$product对象是在循环中声明的,我相信在它之前不能使用同一段代码,对吗?这里是另一个问题,你需要重建你的对象,所以用foreach将你的旧对象分配给一个新对象,如果你发现一个缺少的属性,把它放在新对象中为空