IsAssocTest.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. namespace Tests;
  3. use think\helper\Arr;
  4. class IsAssocTest extends TestCase
  5. {
  6. public function testEmptyArray()
  7. {
  8. // 空数组不是关联数组
  9. $this->assertFalse(Arr::isAssoc([]));
  10. }
  11. public function testSequentialArray()
  12. {
  13. // 顺序索引数组不是关联数组
  14. $this->assertFalse(Arr::isAssoc([1, 2, 3]));
  15. $this->assertFalse(Arr::isAssoc(['a', 'b', 'c']));
  16. $this->assertFalse(Arr::isAssoc([null, false, true]));
  17. }
  18. public function testNonSequentialArray()
  19. {
  20. // 非顺序索引数组是关联数组
  21. $this->assertTrue(Arr::isAssoc([1 => 'a', 0 => 'b'])); // 键顺序不是0,1
  22. $this->assertTrue(Arr::isAssoc([1 => 'a', 2 => 'b'])); // 不是从0开始
  23. $this->assertTrue(Arr::isAssoc([0 => 'a', 2 => 'b'])); // 不连续
  24. }
  25. public function testStringKeys()
  26. {
  27. // 字符串键的数组是关联数组
  28. $this->assertTrue(Arr::isAssoc(['a' => 1, 'b' => 2]));
  29. // 注意:PHP会将字符串数字键'0'、'1'自动转换为整数键0、1
  30. // 所以这个实际上是顺序索引数组,不是关联数组
  31. $this->assertFalse(Arr::isAssoc(['0' => 'a', '1' => 'b']));
  32. $this->assertTrue(Arr::isAssoc(['a' => 'a', 0 => 'b'])); // 混合键
  33. }
  34. public function testMixedKeys()
  35. {
  36. // 混合键类型的数组是关联数组
  37. $this->assertTrue(Arr::isAssoc([0 => 'a', 'b' => 'b']));
  38. $this->assertTrue(Arr::isAssoc(['a' => 1, 2 => 'b']));
  39. }
  40. }