我从数据库中检索的结果包含一个带有汽车的数组($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;
}
但是,结果数组中的品牌字段包含布尔值false
。我做错了什么?
答案 0 :(得分:2)
您正在使用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字符串。
答案 1 :(得分:0)
更改第一行$ resultsMapped = [];到$ resultsMapped = array(); ..
答案 2 :(得分:0)
首先将$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;
}
希望这能解决您的问题