我有以下 PHP 代码,它通过键名称搜索数组并返回等于搜索的结果。只是出于好奇,我该怎么做,无论我搜索什么结果都会是名称键值等于“A”的元素?很快我怎样才能检索名称为“A”的元素?
\n\n我尝试了以下方法,但 \xc2\xb4t 有效:
\n\n$jSearchResult[] = $ajProducts[$i]->name = "A";\nRun Code Online (Sandbox Code Playgroud)\n\n请帮助我,因为我只能\xc2\xb4t弄清楚如何通过键值检索数组的元素,但我确信它一定是非常简单的。
\n\n<?php\n\n//DATA coming from the BROWSER\n$sSearch = $_GET[\'search\'];\n//TURN it into UPPERCASE\nstrtoupper( $sSearch );\n\n//GETTING from the TEXT FILE:\n$sajProducts = file_get_contents( \'products.txt\' );\n$ajProducts = json_decode( $sajProducts );\n\n$match_found = false;\n//Collect all matching result in an array \n$jSearchResult = array();\n//LOOPING THROUGH THE ARRAY OF PRODUCTS\nfor ( $i=0; $i< count( $ajProducts ); $i++ ) {\n\n if ( $sSearch == $ajProducts[$i]->name ) {\n $jSearchResult[] = $ajProducts[$i]->name;\n $match_found = true; \n }\n}\n//if there is a match display the product\nif ( $match_found ) {\n echo json_encode ( $jSearchResult );\n exit;\n}\n//if not display ALL products\nelse { \n\n echo json_encode ( $ajProducts );\n exit;\n}\n\n?>\nRun Code Online (Sandbox Code Playgroud)\n\n$ajProducts看起来像这样:
[\n {\n "id": "59d278cae7017",\n "name": "A",\n "price": "1",\n "quantity": 2,\n "image": "img_webshop\\/productimage-59d74304917c2.jpg"\n },\n {\n "id": "59d27e20c8028",\n "name": "A",\n "price": "2",\n "quantity": 1,\n "image": "img_webshop\\/productimage-59d743233c0cf.jpg"\n },\n {\n "id": "59d6a7ae16d15",\n "name": "A",\n "price": "3",\n "quantity": 2,\n "image": "img_webshop\\/productimage-59d743392fbb5.jpg"\n },\n {\n "id": "59d6d6ee5f752",\n "name": "A",\n "price": "4",\n "quantity": 1,\n "image": "img_webshop\\/productimage-59d74352d5b94.jpg"\n },\n {\n "id": "59d743d207bd5",\n "name": "B",\n "price": "5",\n "quantity": 1,\n "image": "img_webshop\\/productimage-59d743d1e6e64.jpg"\n },\n {\n "id": "59d74451225ac",\n "name": "B",\n "price": "6",\n "quantity": 0,\n "image": "img_webshop\\/productimage-59d7445120871.jpg"\n },\n {\n "id": "59e0d992d1f3b",\n "name": "C",\n "price": "6",\n "quantity": 2,\n "image": "img_webshop\\/productimage-59e725ac79583.jpg"\n }\n]\nRun Code Online (Sandbox Code Playgroud)\n
有一个 php 函数可以做到这一点: http: //php.net/array_filter
$searchResult = array_filter($ajProducts, function ($product) {
return $product->name === 'A';
});
Run Code Online (Sandbox Code Playgroud)
这将使您获得$ajProducts属性name设置为 的所有对象'A'。
查看是否有结果:
$matchFound = !empty($searchResult);
Run Code Online (Sandbox Code Playgroud)