在textarea中,我按照一种模式粘贴随机数据:
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列模式的多维数组,除非最后一个数据是空的,所以它将移动下一个数组的第一行。
如何向PHP说如果在任何数组中最后一个值为空,那么只返回“空数据”之类的内容?
这是我的第一个PHP行,所以我确信结构已经坏了。
编辑:非常感谢大家,它现在按预期工作了!
答案 0 :(得分:1)
<?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)
答案 1 :(得分: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));
}
答案 2 :(得分: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);
答案 3 :(得分: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
)
)