我知道在多维数组上有很多答案,但是我找不到我准确查找的内容。我是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