fork download
  1. <?php
  2.  
  3. /**
  4.  * Função que testa se o array é sequencial.
  5.  *
  6.  * @param array Array a ser testado
  7.  * @return bool True se $array for sequencial, False caso contrário
  8.  */
  9.  
  10. function is_sequential ($array) {
  11. return strpos(json_encode($array), "[") === 0;
  12. }
  13.  
  14. /**
  15.  * Função que testa se o array é associativo.
  16.  *
  17.  * @param array Array a ser testado
  18.  * @return bool True se $array for associativo, False caso contrário
  19.  */
  20.  
  21. function is_associative (array $array) {
  22. return !is_sequential($array);
  23. }
  24.  
  25. /**
  26.  * Lista de testes que a função deve ser submetida.
  27.  *
  28.  * Cada item da lista deve ser um array com três índices.
  29.  * O primeiro, "array", com o array a ser testado pela função.
  30.  * O segundo, "is_sequential", um valor booleano esperado como retorno da função is_sequential.
  31.  * O terceiro, "is_associative", um valor booleano esperado como retorno da função is_associative.
  32.  */
  33.  
  34. $tests = array();
  35.  
  36. // Teste 1: Array com índices numéricos sequenciais
  37.  
  38. $tests[] = [
  39. "array" => ["a", "b", "c", "d", "e"],
  40. "is_sequential" => true,
  41. "is_associative" => false
  42. ];
  43.  
  44. // Teste 2: Array associativo
  45.  
  46. $tests[] = [
  47. "array" => ["name" => "foo", "lastname" => "bar"],
  48. "is_sequential" => false,
  49. "is_associative" => true
  50. ];
  51.  
  52. // Teste 3: Array com chave do tipo string contendo inteiro válido
  53.  
  54. $tests[] = [
  55. "array" => ["0" => "foo", "1" => "bar"],
  56. "is_sequential" => true,
  57. "is_associative" => false
  58. ];
  59.  
  60. // Teste 4: Array com índices do tipo float
  61.  
  62. $tests[] = [
  63. "array" => [0.5 => "foo", -3.5 => "bar"],
  64. "is_sequential" => true,
  65. "is_associative" => false
  66. ];
  67.  
  68. // Teste 5: Array com índices do tipo booleanos
  69.  
  70. $tests[] = [
  71. "array" => [true => "foo", false => "bar"],
  72. "is_sequential" => true,
  73. "is_associative" => false
  74. ];
  75.  
  76. // Teste 6: Array com índice nulo
  77.  
  78. $tests[] = [
  79. "array" => [null => "foo"],
  80. "is_sequential" => false,
  81. "is_associative" => true
  82. ];
  83.  
  84. // Teste 7: Array misto
  85.  
  86. $tests[] = [
  87. "array" => ["foo", "baz" => "bar"],
  88. "is_sequential" => true,
  89. "is_associative" => true
  90. ];
  91.  
  92. // Teste 8: Array de índices numéricos desordenados
  93.  
  94. $tests[] = [
  95. "array" => [1 => "foo", 0 => "bar"],
  96. "is_sequential" => true,
  97. "is_associative" => false
  98. ];
  99.  
  100. // Teste 9: Array de índices numéricos ordenados não sequenciais
  101.  
  102. $tests[] = [
  103. "array" => [0 => "foo", 1 => "bar", 6 => "baz"],
  104. "is_sequential" => true,
  105. "is_associative" => false
  106. ];
  107.  
  108.  
  109. /**
  110.  * Executa os testes.
  111.  */
  112.  
  113. foreach ($tests as $i => $test) {
  114. if ($test["is_sequential"] !== is_sequential($test["array"])) {
  115. echo sprintf("is_sequential: Algo errado não está certo! Teste %d falhou.\n", $i+1);
  116. }
  117.  
  118. if ($test["is_associative"] !== is_associative($test["array"])) {
  119. echo sprintf("is_associative: Algo errado não está certo! Teste %d falhou.\n", $i+1);
  120. }
  121. }
  122.  
Success #stdin #stdout 0.01s 82880KB
stdin
Standard input is empty
stdout
is_sequential: Algo errado não está certo! Teste 4 falhou.
is_associative: Algo errado não está certo! Teste 4 falhou.
is_sequential: Algo errado não está certo! Teste 5 falhou.
is_associative: Algo errado não está certo! Teste 5 falhou.
is_sequential: Algo errado não está certo! Teste 7 falhou.
is_sequential: Algo errado não está certo! Teste 8 falhou.
is_associative: Algo errado não está certo! Teste 8 falhou.
is_sequential: Algo errado não está certo! Teste 9 falhou.
is_associative: Algo errado não está certo! Teste 9 falhou.