2012-03-21 2 views
0

Я вызываю функцию, которая возвращает массив. Итерация цикла for дает следующий результат.Определить тип элемента массива в php

строка (22) "текст/XML; кодировка = UTF-8"

строки (7) "фрагментированной"

строки (4) "GZIP"

массив (2) {["Expect"] => string (12) "100-continue" ["Content-Type"] => строка (48) "application/x-www-form-urlencoded; charset = utf-8"}

объект (CFSimpleXML) # 10 (1) {[0] => строка (6) "123456"}

Как проверить, является ли элемент массива объектом или строкой?

ответ

5
foreach ($array as $element) { 
    if (is_array($element)) { 
    // array 
    } else if (is_string($element)) { 
    // string 
    } else if (is_int($element)) { 
    // int 
    } else if (is_float($element)) { 
    // float 
    } else if (is_bool($element)) { 
    // bool 
    } else if (is_object($element)) { 
    // object 
    } else if (is_resource($element)) { 
    // resource 
    } else { 
    // null/invalid type (you could add an === NULL if you want, I suppose) 
    } 
} 

Существует также get_type() и оператор typeof, но так как эти возвращения строк, которые могут быть изменены в будущих версиях PHP, то is_*() функции являются более надежными.

1
if (is_object($arrayElement)) ... 
if (is_array($arrayElement)) ... 
if (is_string($arrayElement)) ... 
0

Вы можете использовать функцию PHP gettype, а затем выполнить необходимые операции в простом кодеке коммутатора .

http://php.net/manual/en/function.gettype.php

посмотреть здесь: http://codepad.org/LRJcrKjJ

<?php 

     $data = array(1, 1.,'hello', NULL, new stdClass); 

     foreach($data as $item) 
     { 
      $currType = gettype($item); 
      switch($currType){ 
      case "integer" : 
      echo "I am integer ".$item." , double of me = ".($item*2)."\n"; 
      break; 
      case "string" : 
      echo "I am string ".$item." , reverse of me = ".strrev($item)."\n"; 
      break; 
      default: 
      echo "I am ".$currType ."\n" ; 
      break; 
      } 

     } 

    ?> 
2

Я предпочитаю решение переключатель-трик:

foreach ($array as $element) { 
    switch(true) 
    { 
     case is_array($element): 
      // array 
      break; 
     case is_string($element): 
      // string 
      break; 
     case is_int($element): 
      // int 
      break; 
     case is_float($element): 
      // float 
      break; 
     case is_bool($element): 
      // bool 
      break; 
     case is_object($element): 
      // object 
      break; 
     case is_resource($element): 
      // resource 
      break; 
     default: 
      // null 
    } 
}