我无法通过多维数组进行排序,而这些数组是从每次都不同的XML Feed中提取的。我需要找到一些东西并将结果放在一个变量中。我还在学习PHP,不幸的是这有点过头了。
我打破了我所拥有的一切。 $valsarray
中包含的数组示例:
Array
( [0] => Array
(
[tag] => GIVENNAME
[type] => complete
[level] => 8
[value] => peter
)
[1] => Array
(
[tag] => FAMILYNAME
[type] => complete
[level] => 8
[value] => rabbit
)
[2] => Array
(
[tag] => COMPLETENUMBER
[type] => complete
[level] => 9
[value] => 123-345-4567
)
[3] => Array
(
[tag] => URIID
[type] => complete
[level] => 9
[value] => customerEmail@gmail.com
)
)
现在我明白我可以使用:$phone = $valsarray[2][value];
但是,我的问题是,如果没有给出电话号码,XML Feed将不包含电话号码阵列,因此阵列3将成为阵列2.
所以我的问题是如何循环遍历数组以查找COMPLETENUMBER
是否存在,然后将value
中包含的电话号码分配给$phone
变量?
答案 0 :(得分:2)
以这种方式:
$tags = array_column($valsarray, null, 'tag');
if(isset($tags['COMPLETENUMBER'])) {
$phone = $tags['COMPLETENUMBER']['value'];
}
或者,如果您只关心value
:
$tags = array_column($valsarray, 'value', 'tag');
if(isset($tags['COMPLETENUMBER'])) {
$phone = $tags['COMPLETENUMBER'];
}
简而言之:
value
tag
值数组
COMPLETENUMBER
索引,则从value
在array_column()
之后,您可以获得所需的value
:
$email = $tags['URIID'];
答案 1 :(得分:1)
这个循环会这样做:
foreach($valsarray as $fieldArray)
{
if ($fieldArray['tag'] === 'COMPLETENUMBER')
{
$phone = $fieldArray['value'];
break;
}
}
如果你需要在同一个阵列上反复进行这种类型的事情,你最好重新编制索引而不是每次搜索。你可以像这样重新索引:
foreach($valsarray as $key => $fieldArray)
{
$valsarray[$fieldArray['tag']] = $fieldArray;
unset($valsarray[$key]);
}
重新编制索引后,您可以对所需的任何字段执行此操作:
$phone = $valsarray['COMPLETENUMBER']['value'];
答案 2 :(得分:1)
您可以' '
仅获取array_filter
条目,并设置COMPLETENUMBER
(如果找到)。
$phone
根据您的其他评论,如果您想从数组中获取标记子集的值,可以在$items = array_filter($valsarray, function($x) { return $x['tag'] == 'COMPLETENUMBER'; });
$phone = $items ? reset($items)['value'] : null;
回调中使用in_array
。这可以包含在AbraCadaver答案中建议的array_filter
中,以获取您感兴趣的任何标记的值数组:
array_column
结果如下:
$tags = ['COMPLETENUMBER', 'URIID'];
$data = array_column(array_filter($valsarray, function($x) use ($tags) {
return in_array($x['tag'], $tags);
}), 'value', 'tag');