Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取具有特定键/值对的二维数组中的子数组_Php_Arrays_Foreach_Keyvaluepair_Sub Array - Fatal编程技术网

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

Php 获取具有特定键/值对的二维数组中的子数组,php,arrays,foreach,keyvaluepair,sub-array,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' =

我有一个大型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;
    }
}
这是可行的,但我希望有更好的方法来做到这一点。

你可以

  • 在数组($id,$link)中写入
    $link['id']==$id
    而不是
    ,这样成本会更低
  • 添加一个
    break$result=$link之后的code>指令以避免无用的循环

虽然这个答案在被问到这个问题时不起作用,但现在有一个非常简单的方法来解决这个难题

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

$newList = array_combine(array_column($list,'id'),$list);
那么,以下情况将是正确的:

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

PHP 5.4及以上版本中最简单的方法是在其回调函数中结合和:

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',
// )
只返回过滤数组的第一个元素。
OP的
$list

中还有一些,不是真的,不-虽然看起来像是
在_数组中
最好用
$link['id']=$id
@ke20代替。答案主要是多维数组,这里的解决方案比较简单(因为OP的数组只是二维的)。不,不,等等。不要这样做。相反,请转到php手册中的
array\u column()
,并阅读其第3个参数<不应调用code>array\u combine()
。此页面可用于关闭将来的副本,但遗憾的是,接受的答案不是很清晰/可读。也许可以用一个完整的代码块来改进这个答案,并保留解释。