2015-05-21 151 views
0

從我的數據庫中檢索到的結果包含一個包含汽車的數組($resultsCars)。每輛車的品牌都有一個ID。 Var_dumping陣列的結果如下:PHP:映射數組結果

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,並與品牌標識解決的新陣,我曾嘗試下面的代碼:

$resultsMapped = []; 
foreach ($resultsCars as $result) { 
    $result['brand'] = array_search($result['brand'], $arrData); 
    $resultsMapped[] = $result; 
} 

品牌領域但是在結果數組中,包含布爾值false。我究竟做錯了什麼?

+0

問題是'$ arrData'包含的對象(包含你的值)而不是直接包含這些值。我認爲array_search不能像這樣查看對象。此外,在你的對象中'id'和'name'是'private',你可能不得不使用getter來檢查值...可能必須使用自定義函數來搜索'$ arrData' – Random

+0

我沒有看到品牌姓名存在於陣列中 –

+0

@karvin。開發者的品牌是'2cb4c4d6-b706-e411-8ed9-0050568c4806',並在$ arrData中加入'id' – Random

回答

0

更改第一行$ resultsMapped = [];到$ resultsMapped = array(); ..

+0

這些是等價的。 – Erik

0

首先更改$resultsMapped=[] declartion到​​然後更改

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

希望這將解決您的問題

+0

$ result沒有索引'id','$ arrData'沒有... – Random

+0

這只是一個派生描述,使您能夠理解哪些值需要放置在適當的鍵和值上,因爲我們根據總數假設 –

2

您正在使用array_search,這將返回指數匹配的數組元素,而不是元素本身。更有甚者,品牌數組包含對象和私有變量,因此要訪問它們,您必須具有getter函數,並且不能以數組的形式訪問它們。

例如,您不能做到這一點:

$arrData[0]['id'] 

如果對象變量將是公共的,或者你正在使用一個StdClass你可以像這樣訪問他們:

$arrData[0]->id 

否則,您必須實施吸氣功能,然後才能使用:

$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字符串的品牌對象instend。