使用PHP在多维数组中循环
我很难在多维数组中循环。我不是PHP方面的专家。我想做的是搜索某个领域。如果它点击了正确的字段,那么它将抓取数据并存储在变量中,如果它没有点击正确的字段,它将继续搜索正确的字段 这是数组使用PHP在多维数组中循环,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我很难在多维数组中循环。我不是PHP方面的专家。我想做的是搜索某个领域。如果它点击了正确的字段,那么它将抓取数据并存储在变量中,如果它没有点击正确的字段,它将继续搜索正确的字段 这是数组 [111] => Array ( [tag] => B:VALUE [type] => close [level] => 7 ) [112] => Array ( [tag] => B:
[111] => Array
(
[tag] => B:VALUE
[type] => close
[level] => 7
)
[112] => Array
(
[tag] => B:KEYVALUEOFINTHEALTHAGENCYD9J3W_PIR
[type] => close
[level] => 6
)
[113] => Array
(
[tag] => A:AGENCIES
[type] => close
[level] => 5
)
[114] => Array
(
[tag] => A:TOKEN
[type] => complete
[level] => 5
[value] => vy8BMS8nDIFdQWRTb6wyNDGGUMgBzHtOXU6mHqZgdxhRAbi0qkwluK9pjt03OQyf
)
[115] => Array
(
[tag] => LOGINCAREGIVERPORTALRESULT
[type] => close
[level] => 4
)
[116] => Array
(
[tag] => LOGINCAREGIVERPORTALRESPONSE
[type] => close
[level] => 3
)
[117] => Array
(
[tag] => S:BODY
[type] => close
[level] => 2
)
[118] => Array
(
[tag] => S:ENVELOPE
[type] => close
[level] => 1
)
这是我的代码,我想首先为未能完成而道歉:D……我完全不知道该放什么……搜索让我更加困惑……对不起
这是密码
$last = count($vals) - 1;
foreach ($vals as $i => $row) {
if (!$vals == '114') {
next
}
else {
$sessiontoken = <------store the value here
}
}
请尝试以下操作:
foreach ($values as $key => $value){
if ($key == '114') {
if($value['tag']==='A:TOKEN')
$sessiontoken = $value['value'];
}
}
foreach ($vals as $i => $array_value){
if (isset($array_value[$i]['value']) {
$sessiontoken = $array_value[$i]['value'];
break; // stop looping after it is found
}
}
假设您希望找到仅包含在一个结果中的会话令牌。请执行以下操作:
foreach ($values as $key => $value){
if ($key == '114') {
if($value['tag']==='A:TOKEN')
$sessiontoken = $value['value'];
}
}
foreach ($vals as $i => $array_value){
if (isset($array_value[$i]['value']) {
$sessiontoken = $array_value[$i]['value'];
break; // stop looping after it is found
}
}
这里的一个衬垫应该是固定的:
if (!$vals == '114') {
假设如果您在位置114处找到了所需的项目,那么您希望存储会话,您应该这样做。我假设在114位置有一个数组,然后有指向一个值的键?从您的描述来看,似乎每个键实际上都是一个指向某个值的数组?假设它是一个常规的键值对,您可以尝试以下方法:
foreach ($vals as $key=>$value)
{
if ($key !== '114')
{
continue;
} else {
// check if value exists
if (!empty($value['value'])
{
$sessionToken = $value['value'];
}
}
}
如果它不是键值对,则需要将其调整为:
foreach ($vals as $key=>$value)
{
if ($key !== '114')
{
continue;
} else {
foreach ($value as $keyArray => $val)
{
if ($keyArray == 'value')
{
$sessionToken = $value['value'];
}
}
}
}
您的实际问题表明您希望始终返回键“114”。在这种情况下,您根本不需要循环,只需引用该键:
$sessiontoken = $vals['114']['value'];
然而,我认为您实际上想要的是找到任何一个元素都有一个'tag'的'a:TOKEN',它看起来像这样:
foreach ($vals as $i => $row) {
// Here, $row is one item from the $vals array
// You don't want to think about $vals in the condition, just $row
if ( $row['tag'] != 'A:TOKEN' ) {
continue; // there's no "next" keyword in PHP
}
else {
$sessiontoken = $row['value'];
}
}
我可能会像这样交换if:
foreach ($vals as $i => $row) {
if ( $row['tag'] == 'A:TOKEN' ) { // Positive tests are easier to read
$sessiontoken = $row['value'];
}
// you can look for other tags at the same time with elseif ( ... )
else {
continue; // only if none of your conditions are met
}
// if there's nothing after the end of the else,
// you don't need the continue at all
}
考虑到外部数组的索引,我想说OP实际上想知道$key='114'的时间,然后存储$value['value']。@PatrickQ you right这更符合我编辑的意思,现在我不确定他想要存储哪个值实际上我想要存储vy8BMS8nDIFdQWRTb6wyNDGGUMgBzHtOXU6mHqZgdxhRAbi0qkwluK9pjt03OQyf@user3771496ok然后替换为$value['value']我想检查标记是否等于:令牌,如果它等于,那么它将存储vy8BMS8nDIFdQWRTb6wyNDGGUMgBzHtOXU6mHqZgdxhRAbi0qkwluK9pjt03OQyf到$SessionTokent这是它的响应,不是吗?我想我可以在这里看到足够多的结构,向您展示一种更好的使用方法。$value[value]应该是$value['value'],我无法想象在什么情况下第二个版本会与第一个版本的工作方式不同。更不用说整个过程可以简化为$sessiontoken=$vals['114']['value'];哎呀。这应该是“价值”,谢谢你的纠正。第二种方法在$value['value']不是键值对时有效,如上所述。从代码上看,“114”似乎指向一个数组。因此,如果key='114',并且该值实际上是一个数组数组,则OP必须遍历该数组才能找到该值。但在该循环中测试的唯一对象是key,因此它是完全相同的。值是什么没有区别,如果你正在搜索一个键,[$wanted\u key]就是你所需要的一切。这没有什么意义。它所做的是查找诸如$VAL[0][0]['value']、$VAL[1][1]['value']等条目,因为您重用$i的方式不同。