PHP 清空空数组

清空多维数组

/**
 * 最原始的方法
 */
function clearNullArry($arr) {
  foreach ((array) $arr as $key => $val) {
    if (is_array($val)) {
      $arr[$key] = clearNullArry($val);
    }
    else {
      if ($val == '') {
        unset($arr[$key]);
      }
    }
  }
  return $arr;
}

/**
 * 使用array_filter递归清空数组
 * @see http://php.net/manual/en/function.array-filter.php
 */
function array_filter_recursive($input, $callback = null) {
  foreach ($input as &$value) {
    if (is_array($value)) {
      $value = array_filter_recursive($value, $callback);
    }
  }

  return array_filter($input, $callback);
}

清空单个数组

$array = array('demo', NULL, '', 'hahah', array('', 'test'));

//清空单个数组, 以下两个方法都可以
var_dump(array_filter($array));
var_dump(array_diff($array, array('')));
array_filter($array, create_function('$a','return trim($a)!="";'));

PHP 中判断一个数字是否是Unix 时间戳

在php中一个有效的时间是从 1970-01-01 07:00:00 – 2038-01-19 03:14:07. 这个的http://php.net/manual/en/function.strtotime.php
首先一个时间戳中肯定没有小数点.
将 1970-01-01 07:00:00 和 2038-01-19 03:14:07转换成时间戳.

echo strtotime('2038-01-19 03:14:07'); // 2147454847
echo strtotime('1970-01-01 07:00:00'); // 0
$valid = ctype_digit($str) && $str <= 2147483647;
var_dump($valid);

//method 2
function is_timestamp($timestamp) {
    if(strtotime(date('m-d-Y H:i:s',$timestamp)) === $timestamp) {
        return $timestamp;
    } else return false;
}

PHP is_numeric 和 ctype_digit

这两个函数都是判断是否是数字. 他们是不同的. ctype_digit函数是判断一个字符串中是否全部是数字,它会一个一个比较。而is_numeric会判断一个字符串是否是数字类型,这很重要. 比如-1, 1.5 这类的数字在is_numberic中是返回true, 因为是一个数字类型. 而ctype_digit函数它会检测到字符串中有 – . 这类的非数字的符号所以返回false. 这就是区别

$n = '1234.5';
var_dump(is_numeric($n));  // returns bool(true)
var_dump(ctype_digit($n)); // returns bool(false)