2017-10-14 18 views
1

商品名に基づいて検索しています。それは実際に動作し、それは検索に基づいて製品を見つけることができますが、問題は、私が最初のものだけを示す同じ名前のいくつかの製品を持っているときです。どのように最適化できますか?私はあなたの助けに感謝します。phpで検索が正しく動作しない

<?php 

//DATA coming from the browser 
$sSearch = $_GET['search']; 
//TURN it into UPPERCASE 
strtoupper($sSearch); 

//GETTING FROM FILE: 
$sajProducts = file_get_contents('products.txt'); 
$ajProducts = json_decode($sajProducts); 

$matchfound = false; 
//LOOPING THROUGH THE ARRAY OF PRODUCTS 
for ($i=0; $i< count($ajProducts); $i++) { 

    if ($sSearch == $ajProducts[$i]->name) { 
     $jSearchResult = $ajProducts[$i]; 
     $matchfound = true;  
     break; 
    } 
} 
//if there is a match display the product 
if ($matchfound) { 
    echo json_encode ($jSearchResult); 
    exit; 
} 
//if not display ALL products 
else { 

    echo json_encode($ajProducts); 
    exit; 
} 

?> 

とJSON products.textファイル:

[ 
    { 
     "id": "59d278cae7017", 
     "name": "A", 
     "price": "1", 
     "quantity": 3, 
     "image": "img_webshop\/productimage-59d74304917c2.jpg" 
    }, 
    { 
     "id": "59d27e20c8028", 
     "name": "A", 
     "price": "2", 
     "quantity": 3, 
     "image": "img_webshop\/productimage-59d743233c0cf.jpg" 
    }, 
    { 
     "id": "59d6a7ae16d15", 
     "name": "A", 
     "price": "3", 
     "quantity": 2, 
     "image": "img_webshop\/productimage-59d743392fbb5.jpg" 
    }, 
    { 
     "id": "59d6d6ee5f752", 
     "name": "A", 
     "price": "4", 
     "quantity": 4, 
     "image": "img_webshop\/productimage-59d74352d5b94.jpg" 
    }, 
    { 
     "id": "59d743d207bd5", 
     "name": "B", 
     "price": "5", 
     "quantity": 1, 
     "image": "img_webshop\/productimage-59d743d1e6e64.jpg" 
    }, 
    { 
     "id": "59d74451225ac", 
     "name": "B", 
     "price": "6", 
     "quantity": 1, 
     "image": "img_webshop\/productimage-59d7445120871.jpg" 
    }, 
    { 
     "id": "59e0d95cd4111", 
     "name": "B", 
     "price": "4", 
     "quantity": "5", 
     "image": "img_webshop\/productimage-59e0d95cd2c4b.jpg" 
    }, 
    { 
     "id": "59e0d992d1f3b", 
     "name": "C", 
     "price": "6", 
     "quantity": "5", 
     "image": "img_webshop\/productimage-59e0d992d19be.jpg" 
    }, 
    { 
     "id": "59e0d9c59fbf2", 
     "name": "D", 
     "price": "4", 
     "quantity": "5", 
     "image": "img_webshop\/productimage-59e0d9c59f1a5.jpg" 
    } 
] 

答えて

0

一致するすべての結果を配列で収集し、JSONで返します。

$jSearchResult = array(); 
for ($i=0; $i< count($ajProducts); $i++) { 

    if ($sSearch == $ajProducts[$i]->name) { 
     $jSearchResult[] = $ajProducts[$i]; 
     $matchfound = true;  
     //break; 
    } 
} 

だから、ここforeachループは、すべてのJSONの値の反復を完了した後、我々はそれを返し、その後$jSearchResult

内のすべての試合の最後の配列を持つことになります。

if ($matchfound) { 
    echo json_encode ($jSearchResult); 
    exit; 
} 
+0

私の答えを受け入れるための@codeDragonありがとうございます。お力になれて、嬉しいです。 –

0

使用このコード:この代わりの

$matchfound = false; 
 
$jSearchResult = array(); 
 
//LOOPING THROUGH THE ARRAY OF PRODUCTS 
 
for ($i=0; $i< count($ajProducts); $i++) { 
 

 
    if ($sSearch == $ajProducts[$i]->name) { 
 
     $jSearchResult[] = $ajProducts[$i]; 
 
     $matchfound = true; 
 
    } 
 
}

$matchfound = false; 
 
//LOOPING THROUGH THE ARRAY OF PRODUCTS 
 
for ($i=0; $i< count($ajProducts); $i++) { 
 

 
    if ($sSearch == $ajProducts[$i]->name) { 
 
     $jSearchResult = $ajProducts[$i]; 
 
     $matchfound = true;  
 
     break; 
 
    } 
 
}

+0

は君たちをありがとうございます。それは今、完璧に動作します。 – codeDragon

+0

@codeDragon、私の答えを投票してください。 –

関連する問題