2015-04-04 56 views
2

我试图打开包含各种数据类型的输入文件。类似这样的:检查文件中的int或字符串

Woof 
50 
Meow 
30 
//... 

而且我不太确定该怎么做。我已经搜索了一些方法来做到这一点,我发现像ctype_digit,is_digitis_string。我测试了他们,我仍然没有得到预期的结果。

这是代码片段我使用:

// Sorts the array by requested data type 
function sortArray($anArray, $dataType){ 

    $array_string = array(); 
    $array_int = array(); 

    foreach ($anArray as $element){ 
     if (ctype_digit($element)){ 
      array_push($array_int, $element); 
     } 
     elseif (ctype_alpha($element)){ 
      array_push($array_string, $element); 
     } 
    } 

    if ($dataType == "int"){ 
     return $array_int; 
    } 
    elseif ($dataType == "String"){ 
     return $array_string; 
    } 
} // end function sortArray($anArray, $dataType) 

谁能帮指出为什么它不工作?

+0

*为什么它不工作?*你有任何错误?什么不工作意味着什么? – Rizier123 2015-04-04 17:16:44

+0

PHP仍然认为它们都是字符串。 – Sometowngeek 2015-04-05 12:22:43

+0

然后向我们展示您的**完整**和**真实**代码或查看下面的答案可能一个答案解决您的问题 – Rizier123 2015-04-05 14:05:35

回答

0

那么你的功能似乎很复杂。只是过滤所有其他值,你不想与array_filter()出这样的:

<?php 

    //As an example to get the data from the file nice and quick 
    $lines = array_map("trim", file("test.txt", FILE_IGNORE_NEW_LINES)); 

    function filterArrayByType($arr, $type = "int") { 
     return array_filter($arr, ($type === "int"?"ctype_digit":"ctype_alpha")); 
    } 

    $result = filterArrayByType($lines, "string"); //"int" 
    print_r($result); 

?> 

输出:

Array ([0] => Woof [2] => Meow) //Array ([1] => 50 [3] => 30) 
+0

完美的作品!谢谢! :)请问你有没有告诉我array_map(“trim”,file)是如何工作的?我想知道,所以我可以保持对未来的想法。 :) – Sometowngeek 2015-04-06 02:21:51

+0

@RobertP是的肯定:所以基本上'file()'我得到的文件作为数组,其中每行是数组中的1个元素。但为了让'ctype_ *'函数起作用,我必须在每个元素的开始和结束处删除空格。所以在这里我使用['array_map()'](http://php.net/manual/en/function.array-map.php)它基本上遍历每个元素并在其上使用trim函数。 – Rizier123 2015-04-06 02:25:03

+0

@RobertP FYI:您可以接受答案,最能帮助您解决问题(http://meta.stackexchange.com/q/5234)! – Rizier123 2015-04-06 02:25:41

0

IS_STRING()和is_float()会给真的还是假的,如果参数是字符串或浮动。 (浮子可以是12.21)

  • IS_STRING() - 查找变量的类型是否是字符串
  • is_float() - 检测变量的类型是否是浮动
  • is_int( ) - 查找变量的类型是否是整数
  • is_bool() - 找出变量是否是一个布尔
  • is_object() - 检测变量是否是一个对象
  • is_array() - 查找变量是否为数组

请记住,一个数字也可以是一个字符串。它的全部是关于你如何写它。所以is_string必须是is_检查行中的最后一个。

is_string('23') = true 
is_string(23) = false 
is_string('23.5') = true 
is_string(23.5) = false