2017-04-13 93 views
1

動態變量我有我存儲可變位置的數據庫,例如,我有引線陣列,所以我有一個名爲在數據庫中的ID字段,具有$lead['@attributes']['Id']位置。這一切都在數據庫中設置。PHP從陣列

我有被檢索從陣列我有值的問題。

我已經試過目前是這樣的:

foreach($t AS $lead) { 
    $newItem = []; 
    foreach ($this->crm->fields AS $field) { 
     $newItem[$field->name] = ${$field->location}; 
    } 
} 

這不,雖然工作。它給了我一個錯誤說:

Undefined variable: $lead['@attributes']['Id']

,但如果我這樣做echo $lead['@attributes']['Id']; die();,它把ID在頁面上。我究竟做錯了什麼?

TLDR;

我需要創建動態變量,我將其存儲在數據庫中以獲取數組中的信息。

Examples

這是我想從拉數組:

array(6) { 
    ["@attributes"]=> 
    array(10) { 
    ["Id"]=> 
    string(7) "1086984" 
    ["LeadTitle"]=> 
    string(7) "1086984" 
    ["CreateDate"]=> 
    string(19) "03/11/2015 02:00:00" 
    ["ModifyDate"]=> 
    string(19) "04/13/2017 13:02:57" 
    ["ActionCount"]=> 
    string(2) "13" 
    ["LogCount"]=> 
    string(2) "13" 
    ["ReminderCount"]=> 
    string(1) "1" 
    ["ReadOnly"]=> 
    string(5) "false" 
    ["Flagged"]=> 
    string(5) "false" 
    ["LastDistributionDate"]=> 
    string(19) "01/01/0001 00:00:00" 
    } 
} 

我所擁有的數據庫中有以下內容:

ID | Name | Location 

1 | ID | $lead['@attributes']['Id'] 

最後,該陣列我得到應該看起來如下:

array(10) { 
    ["ID"]=> 
    string(7) "1086984" 
} 

EDIT 1

我正在從一個平臺,一個XML文件,通過捲曲。我服用的是XML文件,過simplexml_load_string()運行它,然後json_encode()json_decode(),讓我在最後的數組。

然後我也有一個數據庫,用字段名的列表,並在陣列中的位置,我從XML文件創建。然後,我循環訪問字段數據庫,並以更好的解析方式將XML文件保存到數據庫中。我每5分鐘更新一次信息。我不是生成XML文件的人,也不是以我必須的方式保存信息。我知道這可能不是最好的辦法,但它僅供內部使用,我公司以外的人甚至無法訪問我們正在製作的網站。

EDIT 2/UPDATE 1

我RAN到另一個路障。他們有一個名爲「字段」的項目,其中有一個字段數組。

fields example

的問題是,一切都在他們的 「屬性」。例如,他們是地址,電子郵件,名字,姓氏等。我將如何循環以獲取正確的數據?有任何想法嗎?

這個問題也與其他3個對象存在。操作和日誌,大量日誌...

+2

這是一種可怕的方式來存儲數據,你應該改變類似於路徑'lead.attributes.id'或其他一些策略。唯一的辦法是你的方式是'eval(「\ $ newItem [{$ field-> name}] = {$ field-> location};」);' – AbraCadaver

+0

AbraCadaver您會有什麼建議?這僅用於解析數據。我們使用的平臺爲我們提供了一個XML文件,並對其進行解析。爲了便於更新,我們希望使用MySQL數據庫使其全部動態,以便從我們生成的XML數組中獲取信息。我們解析它,然後將它保存到MySQL數據庫中的表中。 –

+1

'未定義變量:$ lead ['@ attributes'] ['Id']'表示將它視爲字符串,而不是對象/數組。 Sooo ... @ AbraCadaver的eval建議,這樣做;) –

回答

1

要避免使用eval(),你可以在你的數據庫這樣的存儲你的數據:

ID | Name | Location 

1 | ID | @attributes.Id 

在數據庫中的數據並不需要知道你的PHP變量的名稱。

foreach($t AS $lead) { 
    $newItem = []; 
    foreach ($this->crm->fields AS $field) { 
     list($f1, $f2) = explode('.', $field->location); 
     $newItem[$field->name] = $lead[$f1][$f2]; 
    } 
} 

回覆您的更新:

老實說,我不會用數據庫來編碼您的字段映射。我會在你的PHP腳本中定義字段映射。

您必須爲字段,操作和日誌定義特殊情況循環。

我不羨慕你。我已經做了這樣的應用程序,我不得不接受來自另一個部門的數據,格式不明確。就我而言,我被髮送了一個Excel電子表格,並且我編寫了代碼來解析它,並從中獲取我需要的數據。但發送電子表格的部門每週都會更改格式,所以我不得不重新編碼我的解析例程。我試着告訴他們,「決定電子表格的格式,並保持每週都一樣。」他們忽視了我的要求,並繼續以不同的方式進行。然後我的合同到了,我離開了,知道他們會在我離開後的一個星期內破產。

+0

你能看到我的更新2 /編輯2或任何帖子。還有另外一個問題,如果有什麼我可以輕易地解決的話,我會喜歡這樣做。另外,如果我需要深入4層會發生什麼?根據有多少'.',我需要對'[$ f1] [$ f2] [$ f3] ...'進行編碼嗎? –

+0

是的,最難的部分是它們不會改變它,但是我們有多個客戶端使用相同的平臺,但是XML中的數據/格式不同。因此,我爲什麼要做動態變量這樣的事情。我向LinkedIn發送了一個連接請求,所以我可以直接向您發送消息。你還好嗎? –

+0

我很高興認識你,但是我有時間限制我可以做一對一的幫助。我喜歡回答關於Stack Overflow和Quora的問題,因爲像這樣公開這樣做可以幫助很多其他讀者。 –