搜索多维数组并返回针及其在PHP中的位置的最有效方法?

时间:2013-09-02 22:32:11

标签: php arrays search

采用这个简单的多维数组:

$images Array (

  [0] => Array (
    [image_id] => 18
    [votes] => 12
  )

  [1] => Array (
    [image_id] => 76
    [votes] => 10
  )

  ...

  [n] => Array (
    [image_id] => 2
    [votes] => 1
  )
)

在整个数组中搜索某个image_id值的最佳方法是什么,然后在较大的数组中返回image_id的位置,并返回相应的votes同时? array_search()的某些变体是否能够管理此内容?

目前,我正在使用foreach循环:

foreach ($images as $image) {
  $i = 0;
  if ($image['image_id'] == $someNeedle) {
    $resultSet['image'] = $image;
    $resultSet['position'] = $i;

    return $resultSet;
  }
  $i++;
}
然而,这似乎过于复杂。是否有一个本机PHP函数可以加快这个/使我的代码更具语义?谢谢。

4 个答案:

答案 0 :(得分:4)

我怀疑你会发现另一种更快,更清晰的方法。

foreach ($images as $position => $image) {
  if ($image['image_id'] === $someNeedle) {
    return compact('image', 'position');
  }
}

http://php.net/manual/en/function.compact.php

答案 1 :(得分:0)

没有内置的方法可以准确地返回您想要的内容。你可以稍微简化一下,但不多:

foreach ($images as $key => $image) {
    if ($image['image_id'] == $someNeedle) {
        return array(
            'image' => $image,
            'position' => $key,
        );
    }
}

答案 2 :(得分:0)

使用您的数组key代替i,它会为您提供位置,它可以更快一点:

foreach ($images as $key=>$image) {
  if ($image['image_id'] == $someNeedle) {
    $resultSet['image'] = $image;
    $resultSet['position'] = $key;

    return $resultSet;
  }

}

答案 3 :(得分:0)

array_search($needle, array_column($array, 'column'));

获得HCDINH的answer