PHP搜索多维数组

时间:2016-12-23 01:33:27

标签: php arrays

我有两个与我合作的功能。第一个进行数据库调用并获取用户的两个属性。该用户的UserID和Markup。

/*
  Search Markup for a specific QID
*/
function searchMarkup($identifier){

  global $markupArray;

  if(isset($markupArray)){
    foreach($markupArray as $m){
      if((string)$key->QID == (string)$identifier){
        return $m->markup;
      }
    }
  }
  return '';
}

/*
  Fetch the markup data for this dashboard
*/
function fetchMarkup(){

  global $dashboardID;
  global $markupArray;

  $objDB = new DB;
  $objMarkup = $objDB
    -> setStoredProc('FetchMarkup')
    -> setParam('dashboardID', $dashboardID)
    -> execStoredProc()
    -> parseXML();

  // Create an array of the markup
  if(isset($objMarkup->data)){
    $i = 0;
    foreach($objMarkup->data as $m){
      $markup[$i] = array();
      $markup[$i]['QID'] = (string)$m->QID;
      $markup[$i]['markup'] = (string)$m->Markup;
      $i++;
    }
    $markupArray = $markup;
  }
}

当我运行fetchMarkup()然后打印出$markupArray时,我会得到以下结果:

Array
(
    [0] => Array
        (
            [QID] => Q0002
            [markup] => success
        )

    [1] => Array
        (
            [QID] => Q101
            [markup] => success
        )

    [2] => Array
        (
            [QID] => Q200
            [markup] => info
        )

)

我的下一步是通过提供QID并将markup值返回给我来搜索该数组。

我正试图像searchMarkup('Q0002')那样让它告诉我markup的结果,但我没有得到任何回应。

如何从markup创建的数组中检索fetchMarkup()的值?

1 个答案:

答案 0 :(得分:1)

您使用$key的原因?来自哪里

foreach($markupArray as $m)

您可以看到别名$m而不是$key

$markupArray是关联数组而不是对象数组

所以而不是

if((string)$key->QID == (string)$identifier){
    return $m->markup;
}

因为它是一个关联数组,所以将它改为

if((string)$key['QID'] == (string)$identifier){
    return $m['markup'];
}

所以你的searchMarkup会是这样的

function searchMarkup($identifier){

  global $markupArray;

  if(isset($markupArray)){
    foreach($markupArray as $m){
      if((string)$m['QID'] == (string)$identifier){
        return $m['markup'];
      }
    }
  }
  return '';
}

Demo