2017-08-28 78 views
0

我有内部数组的数组:地图二维PHP数组1维

{ 
"0" => array("key" => "code", "id" => "4", "value" => "yes"), 
"1" => array("key" => "parameter", "id" => "4", "value" => "0"), 
"2" => array("key" => "code", "id" => "5", "value" => "no"), 
etc... 
} 

这就是我想做的事:我想有一维数组,其中的关键是“ID”和值会是“价值”。但是,我需要过滤出其关键字为“参数”的条目。所以,在这个例子中,最终的阵列应该是这样的:

{ 
"4" => "yes", 
"5" => "no" 
} 

我似乎无法弄清楚如何做到这一点。你能帮我一下吗?我试图在foreach中编写这个foreach,但是我无法围绕如何过滤数据。

foreach ($settings AS $key => $value) { 
      $id = null; 
      $value = null; 

      foreach ($value AS $key2 => $value2) { 
       // No idea how to filter out uneccesary entries and save the correct ones 
      } 

      $finalArray[$id] = $value; 
     } 
+0

使用[array_filter()](http://php.net/manual/en/function.array-filter.php)删除'key'是'parameter'的条目;那么[array_column()](http://php.net/manual/en/function.array-column.php)对这个结果:'$ finalArray = array_column(array_filter($ settings,function($ value){返回$ value ['key']!=='parameter';}),'id','value');' –

+0

@Marius试试这个:https://stackoverflow.com/a/45921364/4369087 – yoeunes

回答

2

这应做到:

$finalArray = array(); 
foreach ($settings as $setting) { 
    if ($setting['key'] != 'parameter') { 
     $finalArray[$setting['id']] = $setting['value']; 
    } 
} 

假设所有条目有钥匙的 '钥匙', 'ID' 和 '价值'。

+0

问题是可以有更多的键,不仅是“代码”和“参数”。 – Marius

+0

这不是问题所在。如果在这里有其他重要的关键,那么OP会提到它们。 – ksjohn

2

使用array_columnarray_filter这样的,如果你要筛选多个键将它们添加到out_keys阵列:

<?php 

$array = [ 
    ["key" => "code", "id" => "4", "value" => "yes"], 
    ["key" => "parameter", "id" => "4", "value" => "0"], 
    ["key" => "code", "id" => "5", "value" => "no"] 
]; 

$out_keys = ['parameter']; 

$result = array_column(array_filter($array, function($item) use($out_keys) { 
    return !in_array($item['key'], $out_keys); 
}), 'value', 'id'); 

echo "<pre>"; 
print_r($result); 

输出:

Array 
(
    [4] => yes 
    [5] => no 
) 
+0

可以将'array_filter()'回调中使用的条件减少到''parameter'!== $ item ['key']',否则这是最优雅的解决方案。 – localheinz

0

假设$data是你的出发阵列,下面的代码会输出你想要的东西$result

$result = []; 
foreach(array_filter($data, function($el){return $el['key']!='parameter';}) as $el){ 
    $result[$el['id']] = $el['value']; 
} 

Live demo