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

Posted

技术标签:

【中文标题】获取具有特定键/值对的二维数组中的子数组【英文标题】:Get the sub array in a bidimensional array having a particular key/value pair 【发布时间】:2012-12-05 16:30:23 【问题描述】:

我有一个很大的 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;
    

它有效,但我希望有更好的方法来做到这一点。

【问题讨论】:

不是真的,不是 - 虽然看起来 in_array 最好用 $link['id'] == $id 代替 ***.com/questions/1019076/… @ke20 答案大多是针对多维数组的,这里的解决方案更简单一些(因为 OP 的数组只是二维的)。 【参考方案1】:

你可以

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

【讨论】:

此页面可以用于关闭未来的重复,但遗憾的是,接受的答案不是很干净/可读。也许用一个完整的代码块来改进这个答案并保留解释。【参考方案2】:

虽然在问这个问题时这个答案不会奏效,但现在有一种很简单的方法可以解决这个难题。

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

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

然后以下将是正确的:

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

【讨论】:

不,不,不,等等。不要这样做。相反,请转到 php 手册中的 array_column() 并阅读其第三个参数。 array_combine() 不应被调用。【参考方案3】:

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。

【讨论】:

以上是关于获取具有特定键/值对的二维数组中的子数组的主要内容,如果未能解决你的问题,请参考以下文章

PHP:数组——二维转一维,二维转三维,将特定的数据作为键名

如何 - 使用 JQuery 在二维数组和 HashTable 中存储键值对?

具有非零下限的二维数组的子数组

如何按特定的子数组值对多维数组进行分组?

如何按列值对二维数组进行排序?

Restkit 返回具有 0 个键值对的对象数组