检查uri细分

时间:2016-10-16 20:25:07

标签: php codeigniter multidimensional-array

我想在将id发送到数据库之前检查uri段($ sef)是否在数组中。 我想问哪个解决方案更好,或者是否有更好的解决方案。

以下是我尝试搜索数组的示例

1)

  if(array_search($sef, array_column($array,'sef'))) {
    //find id and send it to DB
  } else {
    //wrong sef
  }

2)

foreach($array as $k => $v) {
    if( in_array($sef, $v)) {
       return $v['id']; break;  
       } else {
       //wrong sef
       } 
   }

这是数组的例子

Array
(
    [0] => Array
        (
            [sef] =>some-sef1
            [id] => 39
        )

    [1] => Array
        (
            [sef] => some-sef2
            [id] => 20
        )

    [2] => Array
        (
            [sef] => some-sef3
            [id] => 38
        )

感谢您的回答!

2 个答案:

答案 0 :(得分:0)

这取决于情况。对于小尺寸阵列,它们几乎都需要相同的时间。

1)如果它是一个小数组,你可以使用in_array来完成。

2)如果它是一个大型阵列,你应该使用第一个。因为foreach比array_search需要更多的时间来执行。

答案 1 :(得分:0)

两种方式几乎相同,因此它是一种偏好选择。 虽然有一些调整可能。第一:

$sef_ids = array_column($array, 'id', 'sef');
if (isset($sef_ids[$sef])) { $id = $sef_ids[$sef]; ... }

第二

foreach ($array as $k => $v) {
    if ($v['sef'] === $sef) { $id = $v['id']; ... }
}

现在第一个看起来更快(没有检查),但它仍然是微优化,除非你使用大型数组。我的目标是从一开始就使用$sef_ids数据结构。