从基于值php的多维数组中获取子元素

问题描述 投票:0回答:2

我正在开发一个项目,我有一个像这样的结构化对象:

$main_array=   [
  [
    "key"=> "home",
    "value":=> "Go Home!"
  ],

  [
    "key"=> "business",
    "value"=> "Go to Work!"
  ],

  [
    "key"=> "other",
    "value"=> "Go where you want!"
  ]
]

我想知道是否有办法根据“key”参数检索对象。我想要做的是“提取”嵌套数组

$home_array=["key"=> "home","value":=> "Go Home!"]

对于“商业”和“他人”等等。在javascript中,我可以使用jquery或下划线来获得我想要的东西,是否有一个PHP方法来实现这一点,或者在多维数组/对象中模拟“where”子句?

先感谢您

php arrays multidimensional-array
2个回答
0
投票

您可以使用array_column()轻松转换您拥有'key'列的数组作为主索引...

$main_array=   [
        [
                "key"=> "home",
                "value"=> "Go Home!"
        ],

        [
                "key"=> "business",
                "value"=> "Go to Work!"
        ],

        [
                "key"=> "other",
                "value"=> "Go where you want!"
        ]
];

$out = array_column($main_array, null, "key");

print_r($out['business']);

输出...

Array
(
    [key] => business
    [value] => Go to Work!
)

0
投票

获得与特定键匹配的单个项目的几种可能性:

  1. 迭代主阵列并在到达具有正确密钥的孩子时停止: $object = (function($key) use($main_array) { foreach ($main_array as $object) { if ($object['key'] == $key) return $object; } })('business'); (此示例使用匿名函数,但您可以使用简单的foreach循环并在找到密钥时中断。)
  2. 重新索引主数组并按键查找子项: $indexed = array_column($main_array, null, 'key'); $object = $indexed['business'];
  3. 使用key作为索引来构造数组。使用字符串键并不排除数组元素是可以包含多个值的其他数组。 $main_array= [ 'home' => ["value"=> "Go Home!"], 'business' => ["value"=> "Go to Work!"], 'other' => ["value"=> "Go where you want!"] ];

方法2和3要求它们的密钥是唯一的。方法1没有,但它只返回它找到的第一个实例。

如果你有多个密钥实例,你可能需要array_filter。这将更像你提到的“where子句”。

$key = 'home';
$filtered = array_filter($main_array, function($item) use ($key) {
    return $item['key'] == $key;
});

这将返回多个项目而不是一个。

© www.soinside.com 2019 - 2024. All rights reserved.