簡體   English   中英

PHP:映射數組結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM