[英]PHP: Mapping array results
我從數據庫中檢索到的結果包含一個包含汽車的數組( $resultsCars
)。 每輛汽車的品牌都有一個ID。 Var_dumping數組將導致以下結果:
array(2) {
[0]=>
array(2) {
["brand"]=>
string(36) "2cb4c4d6-b706-e411-8ed9-0050568c4808"
["color"]=>
string(5) "black"
}
[1]=>
array(2) {
["brand"]=>
string(36) "2cb4c4d6-b706-e411-8ed9-0050568c4807"
["color"]=>
string(5) "white"
}
}
我的目標是將ID替換為品牌的實際名稱。 為了實現這一點,我將使用一個將每個ID映射到相應汽車名稱的數組。 Var_dumping此數組( $arrData
)的結果如下:
array(3) {
[0]=>
object(some\path\here)#697 (2) {
["id":"some\path\here":private]=>
string(36) "2cb4c4d6-b706-e411-8ed9-0050568c4806"
["name":"some\path\here":private]=>
string(4) "Audi"
}
[1]=>
object(some\path\here)#697 (2) {
["id":"some\path\here":private]=>
string(36) "2cb4c4d6-b706-e411-8ed9-0050568c4807"
["name":"some\path\here":private]=>
string(8) "Mercedes"
}
[2]=>
object(some\path\here)#697 (2) {
["id":"some\path\here":private]=>
string(36) "2cb4c4d6-b706-e411-8ed9-0050568c4808"
["name":"some\path\here":private]=>
string(3) "BMW"
}
}
為了創建一個基於$resultsCars
並解析了品牌ID的新數組,我嘗試了以下代碼:
$resultsMapped = [];
foreach ($resultsCars as $result) {
$result['brand'] = array_search($result['brand'], $arrData);
$resultsMapped[] = $result;
}
但是,結果數組中的brand字段包含boolean false
。 我究竟做錯了什么?
您正在使用array_search,它將返回匹配的數組元素的索引,而不是元素本身。 更重要的是,brands數組包含帶有私有變量的對象,因此要訪問它們,您必須具有getter函數,並且不能將它們作為數組訪問。
例如,您不能執行以下操作:
$arrData[0]['id']
如果對象變量將是公共變量,或者您正在使用StdClass,則可以按以下方式訪問它們:
$arrData[0]->id
否則,必須實現getter函數,然后可以使用:
$arrData[0]->getId()
您可以使用array_map函數將元素從一個數組映射到另一個數組。 使用array_map,您可以使用將品牌映射到汽車的回調函數。
例如,如果您具有getter函數:
$arrData = [...] // Contains the brands array
$func = function($car) {
foreach ($arrData as $brand) {
if ($car['brand'] === $brand->getId()) {
$car['brand'] = $brand; break;
}
}
return $car;
};
array_map($func, $resultsCars);
之后,您的$ resultsCars數組將具有品牌ID字符串的品牌對象。
更改第一行$ resultsMapped = []; 到$ resultsMapped = array(); ..
首先將$resultsMapped=[]
resultsMapped $resultsMapped=[]
聲明更改為$resultsMapped=[]
resultsMapped $resultsMapped=array();
然后改變
foreach ($resultsCars as $result) {
$result['brand'] = array_search($result['brand'], $arrData);
$resultsMapped[] = $result;
}
至
foreach ($resultsCars as $result) {
$result['brand'] = array_search($result['id'], $arrData);
$resultsMapped[] = $result;
}
希望這能解決您的問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.