2015-04-04 51 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