2017-10-20 163 views
0

在一個textarea,我粘貼隨機DATAS以下一個圖案:PHP multidimensionnal陣列和空值

Data1 Data2 Data3 Data4 Data5 Data6 Data7 
Data8 Data9 Data10 Data11 Data12 Data13 Data14 

喜歡:

名稱[4 * SPACE]姓[4 * SPACE]地址[4 * SPACE]國家[4 * SPACE] 電話【4 * SPACE]性別[4 * SPACE]年齡[4 * SPACE] [換行符]

而在這個模式,最後的數據(年齡在這裏)可以是空的。

所以我做:

<form> 
    <textarea rows="15" cols="100" name="query" id="pastedata">Paste datas there.</textarea> 
    <p style="margin-left: 320px;"><input type="submit" name="submit"value="Submit" /></p> 
</form> 

<?php 


if(isset($_GET['query'])) { 
    $query = $_GET['query']; 
$query = str_replace(' ', ',', $query); 
$query = str_replace("\n", ',', $query); 
$info = explode (',', $query); 
$result = array_map('trim', $info); 
print_r(array_chunk($result, 7)); 
} 

它的工作... PHP返回以下7列模式的multidimensionnal陣列,除非最後的數據是空的,所以它將在接下來的數組的第一個行移位。

我該如何對PHP說,如果在任何數組中最後一個值爲空,那麼只需返回'空數據'之類的東西?

這是我的第一條PHP線,所以我確信結構已經壞了。


編輯:非常感謝大家,它現在按預期工作!

+0

你能給的一個例子你正在尋找的結果? –

+0

只需在輸入上應用修剪? '$ query = trim($ _ GET ['query'])' – Philipp

回答

0

確實有更短的方法來做到這一點,但這裏是一個擴展的例子。

http://sandbox.onlinephpfunctions.com/code/04507d4c64b2b0d53c6f490b1484e4b4bf54b9b3

編輯 - 添加邏輯,以取代 '空數據'

<?php 
$output = []; 

$input = "Data1 Data2 Data3 Data4 Data5 Data6 \nData8 Data9 Data10 Data11 Data12 Data13 Data14\n"; 

// The preg_split with PREG_SPLIT_NO_EMPTY will ignore any empty lines. 
// http://php.net/manual/en/function.preg-split.php 
foreach (preg_split('/\n/', $input, -1, PREG_SPLIT_NO_EMPTY) as $line) { 

    $pieces = explode(' ', $line); 

    // Loop over pieces and check if it is empty. If so, replace it with a string. 
    $output[] = array_map(function($value) { 
     return trim($value) === '' ? 'Empty Data' : $value; 
    }, $pieces); 
} 

print_r($output); 
0

看來你想分割每個記錄的行分隔符。在這種情況下,直接做,而不是將所有記錄合併在一起,然後再拆分。

此外,您可以直接在4個空格上爆炸,而不是轉換爲逗號。

foreach (preg_split("/((\r?\n)|(\r\n?))/", $_GET['query']) as $line) { 
    $info = explode (' ', $query); 
    $result = array_map('trim', $info); 
    print_r(array_chunk($result, 7)); 
} 
0

空值,你可以試試這個:

$input = "Data1 Data2 Data3 Data4 Data5 Data6 Data7 
Data8 Data9 Data10 Data11 Data12 Data13 
Data15 Data16 Data17 Data18 Data19 Data20 Data21"; 

parserInputData(explode("\n", $input)); 

function parserInputData(array $lines){ 
    $output = []; 

    foreach ($lines as $line) { 
     $query = $line; 
     $query = str_replace(' ', ',', $query); 
     $query = str_replace("\n", ',', $query); 
     $info = explode (',', $query); 
     $result = array_map('trim', $info); 
     $columnsCount = count($result); 

     if($columnsCount < 7){ 
      $diff = 7 - $columnsCount; 
      $result = array_merge($result, array_fill($columnsCount-1, $diff, 'Empty data')); 
     } 

     $output[] = $result; 
    } 

    print_r($output); 
} 

此代碼的輸出是

Array 
(
    [0] => Array 
     (
      [0] => Data1 
      [1] => Data2 
      [2] => Data3 
      [3] => Data4 
      [4] => Data5 
      [5] => Data6 
      [6] => Data7 
     ) 

    [1] => Array 
     (
      [0] => Data8 
      [1] => Data9 
      [2] => Data10 
      [3] => Data11 
      [4] => Data12 
      [5] => Data13 
      [6] => Empty data 
     ) 

    [2] => Array 
     (
      [0] => Data15 
      [1] => Data16 
      [2] => Data17 
      [3] => Data18 
      [4] => Data19 
      [5] => Data20 
      [6] => Data21 
     ) 

) 
0
<?php 

$_GET['query'] = 'Data1 Data2 Data3 Data4 Data5 Data6 Data7 
Data8 Data9 Data10 Data11 Data12 Data13 Data14'; 


if(isset($_GET['query'])) { 
    $query = $_GET['query']; 
    $query = explode(PHP_EOL, $query); 
    foreach($query as &$q){ 
     $q = trim($q); 
     $q = explode(' ', $q); 
    } 
var_dump($query); 
} 

首先在EOL 爆炸字符串不是爲每個行修剪空格和爆炸他們[4 *空間]

這將是結果:

array 
    0 => 
    array 
     0 => string 'Data1' (length=5) 
     1 => string 'Data2' (length=5) 
     2 => string 'Data3' (length=5) 
     3 => string 'Data4' (length=5) 
     4 => string 'Data5' (length=5) 
     5 => string 'Data6' (length=5) 
     6 => string 'Data7' (length=5) 
    1 => & 
    array 
     0 => string 'Data8' (length=5) 
     1 => string 'Data9' (length=5) 
     2 => string 'Data10' (length=6) 
     3 => string 'Data11' (length=6) 
     4 => string 'Data12' (length=6) 
     5 => string 'Data13' (length=6) 
     6 => string 'Data14' (length=6)