2017-12-27 258 views
0

我工作的一个项目,我有一个结构化的对象像这样从多维数组得到孩子基于“关键”参数。 我想要做什么是“提取”嵌套数组一样基于价值的PHP

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

等为“业务”和“其他”。在JavaScript中,我可以使用jQuery或下划线来获得我想要的,是否有一个PHP方法来实现这一点,或者什么来模拟多维数组/对象中的“where”子句?

thak你提前

+2

为什么不建立数组,使得密钥实际上是密钥? –

+0

我对你的建议是按照它们意图使用的方式使用数组,而不是你现在使用它们的方式。 – GrumpyCrouton

回答

0

你可以很容易地转换,你必须有“关键”列是使用array_column()主要指标数组...

$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

环顾网络我发现了一个类似的解决方案,但似乎不适用于我的情况。 ASAP,我会发布当前的代码(原始数组是EWS中的一个联系人类的受保护数组) – Biro

+0

有一点需要注意的是,在原始文章中,有一个元素带有':=>',这是不正确的。 –

+0

是@nigel,我知道。我用纯文本写它;) – Biro

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. 使用密钥作为指数乞讨构建阵列与...一起。使用字符串键不排除数组元素是可以包含多个值的其他数组。

    $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; 
}); 

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