【问题标题】:Check for int or string from file从文件中检查 int 或 string
【发布时间】:2015-06-09 13:12:07
【问题描述】:

我正在尝试打开一个包含多种数据类型的输入文件。像这样的:

Woof 
50 
Meow 
30 
//...

而且我不太确定该怎么做。我用谷歌搜索了一些方法,我发现了类似ctype_digit、is_digit 和is_string 的东西。我对它们进行了测试,但仍然没有得到预期的结果。

这是我正在使用的代码 sn-p:

// 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)

谁能帮忙指出为什么它不起作用?

【问题讨论】:

  • 为什么它不工作?你有任何错误吗?不工作是什么意思?
  • PHP 仍然认为它们都是字符串。
  • 然后向我们展示您的完整和真实代码,或者查看下面的答案,也许一个答案可以解决您的问题
  • 我很抱歉没有立即回复。我离开了我的办公桌,我的网络服务器所在的地方。我现在回到办公桌前,正在查看建议。我会让你知道结果如何。再次......对于任何挫败感,我深表歉意。

标签: php arrays file sorting types


【解决方案1】:
如果参数是字符串或浮点数,

is_string() 和 is_float() 将给出 true 或 false。 (浮点数可以是 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

【讨论】:

    【解决方案2】:

    嗯,你的功能似乎很复杂。只需像这样使用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 )
    

    【讨论】:

    • 完美运行!谢谢! :) 能否请您告诉我 array_map("trim", file) 是如何工作的?我想知道,这样我就可以记住未来。 :)
    • @RobertP 当然可以:所以基本上使用file() 我将文件作为数组获取,其中每一行都是数组中的 1 个元素。但是要让ctype_* 函数工作,我必须删除每个元素开头和结尾的空格。所以这里我使用array_map(),它基本上循环遍历每个元素并在其上使用修剪功能。
    • @RobertP 仅供参考:您可以接受如何帮助您最大并解决您的问题的答案 (meta.stackexchange.com/q/5234)!
    • 感谢您为我的困境提供有用的提示和解决方案 :)
    猜你喜欢
    • 2013-07-29
    • 2015-02-13
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    相关资源
    最近更新 更多