【问题标题】:PHP: how to get array based on nested valuePHP:如何根据嵌套值获取数组
【发布时间】:2013-01-18 00:57:21
【问题描述】:

给定这个数组和一个名称(例如'def'),我如何获得包含数组或键?

$all = array(
 '0' => array(
      'name' => 'abc'
      'option' => 1,
    ),
 '1' => array(
      'name' => 'def'
      'option' => 1,
    ),
 '2' => array(
      'name' => 'ghi'
      'option' => 0,
    ),
);

在给定 'def' 的情况下返回这个数组的最佳方法是什么?

$single = array(
  'name' => 'def'
  'option' => 1,
);

我可以这样做:

$single = array();
foreach ($all as $key => $value) {
  if ($value['name'] == 'def') {
    $single = $all[$key]; 
  }
}

或者预渲染数组中的键,使其看起来像这样:

$all = array(
 'abc' => array(
      'name' => 'abc'
      'option' => 1,
    ),
 'def' => array(
      'name' => 'def'
      'option' => 1,
    ),
 'ghi' => array(
      'name' => 'ghi'
      'option' => 0,
    ),
);
$single = $all['def'];

但我想知道是否有更短的 php 函数。

【问题讨论】:

  • foreach 方法总是最适合这种情况(尽管如果在if 块中包含break 会稍微好一点)。你也可以用其他方式来做,但它们会更冗长,或更不清晰,或两者兼而有之。

标签: php arrays multidimensional-array


【解决方案1】:

你可以使用array_filter:

array_filter($array, function($var){
   return $var["name"] == "def";
});

【讨论】:

  • 但是你还需要解开找到的值,所以像list($single) = array_filter(...) 这样的东西,因为reset 会抱怨如果你传入一个临时值(它通过引用获取它的参数)。这也是我能想到的最好的方法,但恕我直言,这太聪明了。
  • 感谢您的好主意!我将此标记为答案,因为它尽可能接近单个函数调用。虽然由于可读性和有点复杂,我确实不确定我会使用它。
猜你喜欢
  • 1970-01-01
  • 2017-01-23
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2023-01-14
  • 2017-01-26
  • 2023-01-28
  • 1970-01-01
相关资源
最近更新 更多