2016-08-14 21 views
1

一個新的數組現在和商店,我有這個變量和值檢查的值是在PHP

$name=GTX 980 

而且我陣列上,

Arraynames

Array ([0] => Array ([name] => GTX 970 [price] => 123) [1] => ([name] => GTX 980 [price] => 321)) 

現在我想檢查數組是否具有與$ name匹配的名稱並存儲在不同的數組中我試過這個代碼

for($i=0;i<=count($shophive);$i++){ 
    if(strpos($shophive,$trimmedName) !== FALSE){ 
     $newshophive[$i]=[ 
     'name' =>$shophive[$i], 
     'price' =>$shophive[$i], 
     'link'=>$shophive[$i], 
     'image'=>$shophive[$i] 
     ]; 
    } 
} 

但它給錯誤

功能名稱必須是一個字符串...

誰能解釋什麼是錯的,什麼可能是一個解決方案嗎?

+1

'$ strpos'是一個變量,'strpos'是一個函數。 –

+0

好吧,現在我需要一個新的TEXTEDITOR可見文本! –

+0

請注意,數組的第一個元素是另一個數組 – ChaseTheSun

回答

1

下面的函數,只需檢查給定String是否包含在給定的數組中。如果是這樣,它增加了含有String到一個新的數組,並最後返回結果的元件...

<?php 

    $arr = [ 
     ['name'=>'GTX 970', 'price'=>123], 
     ['name'=>'GTX 980', 'price'=>321], 
     ['name'=>'GTX 980', 'price'=>350], 
     ['name'=>'GTX 980', 'price'=>300], 
     ['name'=>'ABC 980', 'price'=>305], 
     ['name'=>'JHK 980', 'price'=>375], 
     ['name'=>'LMN 105', 'price'=>250], 
    ]; 

    var_dump(searchArrayTree($arr, 'GTX 980')); 

    function searchArrayTree($array, $searchValue){ 
     $result  = []; 

     foreach($array as $iKey=>$item){ 
      $searchKey = array_search($searchValue, $item); 
      if($searchKey){ 
       $result[] = $item; 
      } 

     } 
     return $result; 
    } 

上述var_dump()(這也是demoed here)生產:

array (size=3) 
     0 => 
     array (size=2) 
      'name' => string 'GTX 980' (length=7) 
      'price' => int 321 
     1 => 
     array (size=2) 
      'name' => string 'GTX 980' (length=7) 
      'price' => int 350 
     2 => 
     array (size=2) 
      'name' => string 'GTX 980' (length=7) 
      'price' => int 300 

或者,使用regex,以便您可以在GTX 980等相關字詞組範圍內縮小搜索範圍,並且仍然可以與GTX 980的所有條目進行匹配:

<?php 

    $arr = [ 
     ['name'=>'GTX 970', 'price'=>123], 
     ['name'=>'GTX 980', 'price'=>321], 
     ['name'=>'GTX 980', 'price'=>350], 
     ['name'=>'GTX 980', 'price'=>300], 
     ['name'=>'ABC 980', 'price'=>305], 
     ['name'=>'JHK 980', 'price'=>375], 
     ['name'=>'Le EVGA GTX 980',     'price'=>250], 
     ['name'=>'GIGABYTE GEFORCE GTX 980 W3. ', 'price'=>250], 
    ]; 

    var_dump(searchArrayTree($arr, 'GTX 980')); 
    function searchArrayTree($array, $searchTerm){ 
     $result  = []; 

     foreach($array as $iKey=>$item){ 
      $itemPrice = $item['price']; 
      $itemName = $item['name']; 
      $searchKey = preg_match("#" . preg_quote($searchTerm). "#", $itemName); 
      if($searchKey){ 
       $result[] = $item; 
      } 

     } 
     return $result; 
    } 

var_dumpdemoed here)的結果是這樣的:

array (size=5) 
     0 => 
     array (size=2) 
      'name' => string 'GTX 980' (length=7) 
      'price' => int 321 
     1 => 
     array (size=2) 
      'name' => string 'GTX 980' (length=7) 
      'price' => int 350 
     2 => 
     array (size=2) 
      'name' => string 'GTX 980' (length=7) 
      'price' => int 300 
     3 => 
     array (size=2) 
      'name' => string 'Le EVGA GTX 980' (length=15) 
      'price' => int 250 
     4 => 
     array (size=2) 
      'name' => string 'GIGABYTE GEFORCE GTX 980 W3. ' (length=29) 
      'price' => int 250 
+0

「調用未定義的函數searchArrayTree()」給了我這個錯誤! –

+0

我嘗試了整個代碼。在我身邊顯示錯誤。 –

+0

@ArAdAliSoomro檢查工作代碼在這裏:https://eval.in/622241 – Poiz

0

您正在調用一個本機php函數,它的前面有一個$$strpos

它正在尋找一個名爲$strpos的變量,它試圖傳遞2個變量。 但由於$strpos沒有設置變量,所以它返回NULL,並且您收到該錯誤。

+0

needle不是一個字符串或一個整數......現在這個! –

+0

該錯誤告訴您需要調試的所有內容。 –

+0

Vasil我已更新代碼!仍然錯誤 –