【问题标题】:Checking uri segment检查 uri 段
【发布时间】:2016-10-16 20:25:07
【问题描述】:

在将 id 发送到数据库之前,我想检查 uri segment($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
        )

感谢您的回答!

【问题讨论】:

  • 我发现第一个最容易理解,那么你如何定义最好?

标签: php codeigniter multidimensional-array


【解决方案1】:

视情况而定。对于小尺寸数组,它们几乎都需要相同的时间。

1) 如果是小数组,可以使用 in_array 来实现。

2) 如果它是一个大数组,你应该使用第一个。因为执行 foreach 会比 array_search 花费更多的时间。

【讨论】:

    【解决方案2】:

    两种方式几乎相同,所以这是一个偏好选择。 虽然有一些调整是可能的。第一:

    $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 数据结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-08
      • 2017-06-26
      • 1970-01-01
      • 2019-07-11
      • 2011-10-26
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多