2012-07-12 82 views
0

我正在使用CodeIgniter並創建了自定義表單首選項自定義配置。在此我有一個如下的數組:PHP - 如果in_array

Array 
(
    [1] => Category 1 
    [2] => Category 2 
    [3] => Category 3 
    [4] => Category 4 
    [5] => Category 5 
) 

我順便指出,在視圖作爲VAR $service_categories什麼話,我想這樣做是與之相匹配的「價值」,也就是在數據庫。 I.E 5.如果匹配,則在視圖中顯示Category 5。目前我只是在展示5 - 這對用戶來說並不好。

變量$service->service_category是一個數字。

的VAR service生產:是

Array 
(
    [0] => stdClass Object 
    (
     [service_id] => 3 
     [organisation_id] => 2 
     [service_name] => Edited Service 3 
     [service_description] => This is service 3 provided by 
     [service_category] => 5 
     [service_metadata] => Metadata for service 3 - Edited 
     [service_cost] => 22.00 
     [service_active] => active 
    ) 
) 

我當前PHP此如下:

if (in_array($service->service_category, $service_categories)) 
{ 
    echo "Exists"; 
} 

然而,Exists未在圖,示出。它什麼都沒有顯示。

我在做in_array方法有問題嗎?

+0

你可以在這裏發佈'var_dump($ service)'嗎? – 2012-07-12 11:06:24

+0

當然,我已經將它添加到問題 – StuBlackett 2012-07-12 11:09:52

+0

在旁註:這是一個很好的方式來問一個問題,信息是足夠徹底的:) – 2012-07-12 11:10:46

回答

4

in_array()檢查是否陣列中存在。所以in_array('類別1',$ service_categories)可以工作。

然而,檢查的主要是存在於一個數組,你可以使用:

if(array_key_exists($service->service_category, $service_categories)) { 
    echo "Exists"; 
} 

我想,這是你在找什麼。

+0

輝煌,這就是它帶回來。我會試着找出如何匹配現在的名字 – StuBlackett 2012-07-12 11:12:56

+0

'isset()'也可以使用。然而,由於'isset()'檢查鍵是否存在**和**值不爲空,所以我寧願使用'array_key_exists()',因爲它只檢查鍵是否存在。 – 2012-07-12 11:26:11

4

變量:$ service-> service_category是一個數字。

而這正是問題所在:您的測試看看「5」是否等於「5類」,顯然不是。最簡單的解決辦法是在前面加上「5」與「分類」:

<?php 
$category = 'Category ' . $service->service_category; 

if (in_array($category, $service_categories)) { 
    echo "Exists"; 
} 

編輯:如果您要檢查,如果數組關鍵存在(因爲‘5’=>‘5類’)這可以通過isset()或array_key_exists來實現。

<?php 
if (array_key_exists ($service->service_category, $service_categories)) { 
    echo "Exists"; 
} 

// does the same: 
if (isset ($service_categories[service->service_category])) { 
    echo "Exists"; 
} 
2
if (isset($service_categories[$service->service_category])) { 
    echo "Exists"; 
}