我知道在多維數組上有很多答案,但是我找不到我準確查找的內容。我是PHP新手,不能完全理解其他一些示例來修改它們。如果有人能指引我,這將是非常感謝。PHP - 根據密鑰名稱從多維數組創建單個數組
外部服務正在向我傳遞以下多維數組。
$mArray = Array (
[success] => 1
[errors] => 0
[data] => Array (
[0] => Array (
[email] => [email protected]
[id] => 123456
[email_type] => html
[ip_opt] => 10.10.1.1
[ip_signup] =>
[member_rating] => X
[info_changed] => 2011-08-17 08:56:51
[web_id] => 123456789
[language] =>
[merges] => Array (
[EMAIL] => [email protected]
[NAME] => Firstname
[LNAME] => Lastname
[ACCOUNT] => ACME Ltd
[ACCMANID] => 123456adc
[ACCMANTEL] => 1234 123456
[ACCMANMAIL] => [email protected]
[ACCMANFN] => Humpty
[ACCMANLN] => Dumpty
)
[status] => unknown
[timestamp] => 2011-08-17 08:56:51
[lists] => Array ()
[geo] => Array ()
[clients] => Array ()
[static_segments] => Array ()
)
)
)
我唯一感興趣的信息是在鍵名下的數組中保存的鍵/值對「合併」。這是關於第三陣列深的。數組的鍵名總是被稱爲合併,但不能保證它在數組中的位置不會被移動。合併數組中的鍵/值對的數量也是可以改變的。
我想我需要的是array_walk_recursive($ mArray,「myfunction」,$ search)的函數;其中$ search包含我正在尋找的鍵名稱(合併)的字符串。它需要遍歷數組直到找到該鍵,檢查它是否包含數組,然後(保留鍵),將每個鍵/值對返回到一個數組中。
因此,爲了清楚起見,該函數的輸出將返回:
$sArray = Array (
[EMAIL] => [email protected]
[NAME] => Firstname
[LNAME] => Lastname
[ACCOUNT] => ACME Ltd
[ACCMANID] => 123456adc
[ACCMANTEL] => 1234 123456
[ACCMANMAIL] => [email protected]
[ACCMANFN] => Humpty
[ACCMANLN] => Dumpty
)
然後我就可以移動到在我的項目,這是密鑰的單一合併數組元素比較下一步從HTML DOM解析器中獲取的ID,並將屬性值替換爲包含在單個數組中的屬性值。
我可能需要一個foreach循環。我知道我可以使用is_array來驗證$ search是否是一個數組。它正在加入我一直在努力的一切。
感謝您的幫助。
謝謝,這工作很好。我查了gettype。如果我理解了這個權利,那麼您確保$ key和$ mykey是相同類型(字符串或數字),然後它們彼此相等(或匹配)? – Dominic
這是對的。如果您嘗試將字符串與數字進行比較,則PHP可以返回錯誤的肯定匹配。 –
更簡單的方法是使用嚴格的比較'==='來防止PHP的類型雜耍。看到這個頁面解釋和演示鬆散比較的潛在問題:https://stackoverflow.com/questions/44426990/type-juggling-while-making-loose-comparison-yields-unwanted-result – mickmackusa