[英]Using array_filter to filter multidimensional array with another array
我有兩個數組,第二個是多維數組。 我試圖返回第三個數組,其中Array2中的service_id與Array1中的值匹配。
Array1
(
[0] => 158
[1] => 162
)
Array2
(
[localhost] => Array
(
[0] => Array
(
[host_name] => localhost
[current_state] => 0
[service_id] => 158
)
[1] => Array
(
[host_name] => localhost
[current_state] => 0
[service_id] => 159
)
)
[192.168.0.43] => Array
(
[0] => Array
(
[host_name] => 192.168.0.43
[current_state] => 0
[service_id] => 168
)
[1] => Array
(
[host_name] => 192.168.0.43
[current_state] => 1
[service_id] => 162
)
)
)
因此,Array3應該是:
Array3
(
[localhost] => Array
(
[0] => Array
(
[host_name] => localhost
[current_state] => 0
[service_id] => 158
)
[192.168.0.43] => Array
(
[0] => Array
(
[host_name] => 192.168.0.43
[current_state] => 0
[service_id] => 162
)
)
)
這是我到目前為止的內容,但似乎並沒有過濾整個數組。
$Array3= array_filter($Array2, function ($value) use ($Array1) {
return in_array(array_shift($value)['service_id'], $Array1);
});
我在這里關閉嗎,我想念什么?
我認為這是因為您想在第二個層次進行過濾,所以它需要遍歷第一層,然后過濾第二層(以此類推)。
因此,此代碼使用array_map()
遍歷數組的主機級別( localhost
和192.168.0.43
),然后在其中使用array_filter()
。 必須使用use()
將查找數組傳遞到函數的每個級別
$array3 = array_map(function($data) use ($Array1)
{ return array_filter($data, function($sub) use ($Array1)
{ return in_array($sub["service_id"], $Array1); });
}, $Array2);
print_r($array3);
打印...
Array
(
[localhost] => Array
(
[0] => Array
(
[host_name] => localhost
[current_state] => 0
[service_id] => 158
)
)
[192.168.0.43] => Array
(
[1] => Array
(
[host_name] => 192.168.0.43
[current_state] => 1
[service_id] => 162
)
)
)
因此,下面應該是實現$ Array3所需要的:
$Array3 = array(array($Array2[0][0], $Array2[0][1], $Array1[0]), array($Array2[1][0],
$Array2[1][1], $Array1[1]));
但是,要更動態地實現此目的,您需要使用類似:
$Array3 = array();
for($i = 0; $i < $Array2[0].length; $i++){
array_push($Array3, array($Array2[$i][0], $Array2[$i][1], $Array1[$i]));
}
var_dump($Array3) // For debug only.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.