如何区分具有相同计数的1-dim阵列和多dim阵列?

时间:2017-06-12 17:53:57

标签: php arrays multidimensional-array data-structures

我有2个潜在的响应数组,我不知道我会得到哪一个。 但我知道它将是以下之一:

  • 1 - 可能包含具有键和值的数组
  • 2 - 可能只包含键和值

我的目标是检查我的回答是否属于该类别之一,并根据该回答做我的逻辑。

我尝试使用PHP count()函数,但它们都返回2 - ,它是相同的值

我应该检查一下,知道我得到了什么类型的回应?

阵列#1

array:2 [▼

  0 => array:2 [▼

        "content" => "Administrator"
        "XSI:TYPE" => "xs:string"

    ]
      1 => array:2 [▼

        "content" => "Read Only"
        "XSI:TYPE" => "xs:string"

    ]
]

阵列#2

array:2 [▼

  "content" => "Read Only"
  "XSI:TYPE" => "xs:string"
]

4 个答案:

答案 0 :(得分:2)

我同意proposed by cmorrissey in the comments似乎是最好的方式:

  

因为您知道数组键,所以这是检查的最快方法     Sub Button1_Click() Dim Customers() As String Dim STD, LTD, LIFE, FMLA As Boolean Dim FilePath As String Dim i, c, n As Integer i = 15 c = 0 n = 0 Range("C15").End(xlDown).Activate Dim r As String r = ActiveCell.Row For i = 15 To r STD = False LTD = False LIFE = False FMLA = False If ActiveSheet.Rows(i).Hidden = False Then Dim loc As String loc = "C" & i Range(loc).Activate ReDim Customers(c) Customers(c) = ActiveCell.Value Dim MyFile As String If Range("Z" & i).Value <> "" Then STD = True End If If Range("AA" & i).Value <> "" Then LTD = True End If If Range("AB" & i).Value <> "" Then FMLA = True End If If Range("AC" & i).Value <> "" Then LIFE = True End If MyFile = Customers(c) If STD = True Then MyFile = MyFile & " - STD" End If If LTD = True Then MyFile = MyFile & " - LTD" End If If LIFE = True Then MyFile = MyFile & " - Life" End If If FMLA = True Then MyFile = MyFile & " - FMLA" End If MsgBox (MyFile) FilePath = Application.GetSaveAsFilename(MyFile) c = c + 1 End If Next End Sub

对于你不知道数组键是什么的情况,我之前的回答应该仍然有效:

从阵列中获取第一项。

if(isset($myArray['content'])){ } else { }

然后数数。

$first = reset($array);

您也可以使用if (count($first) > 1) { // it's like array 1 } else { // it's like array 2 ( count($any_string) always returns 1 ) } 。这可能会快一点。

答案 1 :(得分:1)

我认为这可以帮助您区分两个相同计数的数组。您可以将COUNT_RECURSIVE标记与count函数一起使用。

Try this code snippet here

if(count($array1,COUNT_RECURSIVE)==count($array2,COUNT_RECURSIVE))
{
    echo "Both's value are strings with equal count";
}
elseif(count($array1,COUNT_RECURSIVE)>count($array2,COUNT_NORMAL))
{
    echo "Array one is array of arrays";
}
else
{
    echo "Array two is array of arrays";
}

答案 2 :(得分:1)

我知道您需要知道数组内是否存在其他数组。我有这个可行的解决方案。

我们可以有这样的数组:

$array = array(1, "string", array(1, 2));

它有一个整数,字符串和数组。我们可以使用gettype()函数来获取事物的类型。

在这个例子中:

 foreach($array as $row) {
   echo gettype($row) . '<br>';
 }

我们有下一个结果:

integer
string
array

我们可以这样做:

foreach($array as $row) {
  if(gettype($row) == 'array') {
    echo "This is an array<br>";
  } else {
    echo "Keep trying guy...<br>";
  }
}

结果将是:

Keep trying guy...
Keep trying guy...
This is an array

我希望对你有所帮助,并记住“爱编码”:)

答案 3 :(得分:0)

我不完全确定我逐字理解这个问题,但我最初的感觉是你要检查父数组是否有任何子数组元素?

在那种情况下,我认为你的意思是?

foreach ($response as $element) {

    if (is_array($element)) {
        // The element is an array
    } else {
        // The element is not an array
    }
}