获取具有特定键/值对的二维数组中的子数组

时间:2012-12-18 12:51:29

标签: php arrays foreach keyvaluepair sub-array

我有一个很大的PHP数组,类似于:

$list = array(
    array(
        'id'     = '3243'
        'link'   = 'fruits'
        'lev'    = '1'
    ),
    array(
        'id'     = '6546'
        'link'   = 'apple'
        'lev'    = '2'
    ),
    array(
        'id'     = '9348'
        'link'   = 'orange'
        'lev'    = '2'
    )
)

我想获得包含特定id

的子数组

目前我使用以下代码:

$id = '3243'
foreach ($list as $link) {
    if (in_array($id, $link)) {
        $result = $link;
    }
}

它有效,但我希望有更好的方法。

3 个答案:

答案 0 :(得分:4)

你可以

  • $link['id']==$id而不是in_array($id, $link),这样会更便宜。
  • break;之后添加$result = $link;指令以避免无用循环

答案 1 :(得分:2)

虽然在提出问题时这个答案是行不通的,但现在解决这个难题的方法很简单。

您可以在PHP 5.5中执行以下操作:

$newList = array_combine(array_column($list,'id'),$list);

以下将是真的:

$newList[3243] = array(
                         'id'   = '3243';
                         'link' = 'fruits'; etc...

答案 2 :(得分:1)

PHP 5.4和更高版本中最简单的方法是在其回调函数中组合array_filteruse language construct

function subarray_element($arr, $id_key, $id_val = NULL) {
  return current(array_filter(
    $arr,
    function ($subarr) use($id_key, $id_val) {
      if(array_key_exists($id_key, $subarr))
        return $subarr[$id_key] == $id_val;
    }
  ));
}
var_export(subarray_element($list, 'id', '3243')); // returns:
// array (
//   'id' => '9348',
//   'link' => 'orange',
//   'lev' => '2',
// )

current仅返回过滤后的数组的第一个元素。   来自OP的$list的另外online 3v4l examples of getting different sub-arrays