PHP多维数组搜索与变量赋值问题求助
解决方案
你的核心需求是忽略customFieldValues的数组顺序,通过name字段匹配提取city和state对应的ID与值,以下是正确的实现代码:
// 假设原始数组变量为 $returncustdata $custID = $returncustdata['contactId']; // 初始化目标变量 $custFieldCityID = ''; $custFieldCity = ''; $custFieldStateID = ''; $custFieldState = ''; // 遍历customFieldValues数组匹配目标字段 foreach ($returncustdata['customFieldValues'] as $field) { if ($field['name'] === 'city') { $custFieldCityID = $field['customFieldId']; $custFieldCity = $field['value'][0]; } elseif ($field['name'] === 'state') { $custFieldStateID = $field['customFieldId']; $custFieldState = $field['value'][0]; } } // 可选:打印结果验证 var_dump($custID, $custFieldCityID, $custFieldCity, $custFieldStateID, $custFieldState);
原代码失败原因
你的嵌套foreach逻辑完全错误:
- 第一层
foreach($returncustdata as $row)遍历的是顶层数组的键值对,$row会依次是V(contactId的值)、Mrs Mder(name的值)这类字符串,以及customFieldValues数组本身。 - 第二层
foreach($row as $k)当$row是字符串时,会遍历单个字符,后续调用$k['customFieldValues']必然触发错误,完全偏离了遍历字段的目标。
核心逻辑说明
- 固定字段直接提取:
contactId是顶层固定键,直接取值即可。 - 按name字段匹配:遍历
customFieldValues的每个元素,通过name字段判断当前是否为目标字段,无需依赖数组索引位置。 - 处理值数组:从示例数组看,每个字段的
value是单元素数组,直接取[0]即可获取对应值。
内容的提问来源于stack exchange,提问作者Vinicio Guzman
相关产品推荐
相关产品推荐

