0

我正在使用 CodeIgniter 并创建了一个自定义表单首选项自定义配置。我有一个数组如下:

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

我将它作为 var 传递给视图,$service_categories然后我想做的是将它与数据库中的“值”相匹配。IE 5. 如果匹配,则显示Category 5在视图中。目前我只是展示5- 这对用户没有好处。

变量$service->service_category是一个数字。

varservice产生:

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方法有问题吗?

4

4 回答 4

4

in_array()检查数组中是否存在。所以 in_array('Category 1', $service_categories) 会起作用。

但是,要检查数组中是否存在键,可以使用:

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

我想,这就是你要找的。

于 2012-07-12T11:12:04.313 回答
4

变量 : $service->service_category 是一个数字。

这正是问题所在:您测试“5”是否等于“5 类”,但显然不是。最简单的解决方案是在“5”前面加上“Category”:

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

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

编辑:如果要检查数组是否存在(因为 '5' => 'Category 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";
}
于 2012-07-12T11:09:49.573 回答
2

我认为array_key_exists是您可能搜索的功能。

于 2012-07-12T11:09:59.530 回答
2
if (isset($service_categories[$service->service_category])) {
   echo "Exists";
}
于 2012-07-12T11:10:00.023 回答