我有一个循环:
$ensplit = explode("|", $elementvalues);
$InsertAttributes = "Insert INTO NodeAttributes (Node_ID";
foreach($ensplit as $elementname)
{
$InsertAttributes .= ", $elementname";
}
这不起作用。我明白为什么不这样做。仅添加循环中的当前属性。所以我每次只有(Node_ID,1个元素)。有人可以帮我解决问题吗?
$ ensplit的var_dump($ ensplit)类似于:
array(1) {
[0]=>
string(8) "hardware"
}
array(1) {
[0]=>
string(6) "access"
}
array(1) {
[0]=>
string(3) "IPs"
}
array(1) {
[0]=>
string(8) "hardware"
}
array(1) {
[0]=>
string(6) "access"
}
array(1) {
[0]=>
string(3) "IPs"
}
array(1) {
[0]=>
string(8) "hardware"
}
array(1) {
[0]=>
string(6) "access"
}
array(1) {
[0]=>
string(3) "IPs"
print_r($ ensplit)给出:
Array
(
[0] => hardware
)
Array
(
[0] => access
)
Array
(
[0] => IPs
)
Array
(
[0] => hardware
)
Array
(
[0] => access
)
Array
(
[0] => IPs
)
Array
( ...
我刚刚通过终端复制了结果而没有订单。
$ elementvalues的var_dump($ element)是这样的:
string(6) "access"
string(3) "IPs"
string(9) "defaultgw"
string(14) "interface_name"
string(12) "interface_rx"
string(12) "interface_tx"
string(15) "interface_error"
string(8) "hardware"
string(6) "access"
string(3) "IPs"
string(9) "defaultgw"
string(14) "interface_name"
string(12) "interface_rx"
而print_r($ elementvalues)是:
interface_errorhardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardwareaccessIPshardwareaccessIPshardwareaccessIPshardwareaccessIPshardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardware
我的代码输出片段
Insert INTO NodeAttributes (Node_ID, defaultgw)VALUES (10.95.8.10 , 10.95.254.165)
Insert INTO NodeAttributes (Node_ID, interface_name)VALUES (10.95.8.10 , bridge-AP-WB)
Insert INTO NodeAttributes (Node_ID, interface_rx)VALUES (10.95.8.10 , 305796188)
Insert INTO NodeAttributes (Node_ID, interface_tx)VALUES (10.95.8.10 , 2724819166)
答案 0 :(得分:1)
我修改了$ ensplit。
$ensplit = array('ele1','ele2','ele3','ele4','ele5');
$InsertAttributes = "Insert INTO NodeAttributes (Node_ID";
foreach($ensplit as $elementname)
{
$InsertAttributes .= ", $elementname";
}
echo $InsertAttributes;
// returns: Insert INTO NodeAttributes (Node_ID, ele1, ele2, ele3, ele4, ele5
我认为问题在于$ ensplit。你应该var_dump($ ensplit)告诉我们你找到了什么。
修改强>
你正在使用“|”爆炸$ elementvalues,但你的print_r($ elementvalues)会返回:
interface_errorhardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardwareaccessIPshardwareaccessIPshardwareaccessIPshardwareaccessIPshardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardware
哪个没有“|”s。这有什么作用?
答案 1 :(得分:0)
根据您为$elementvalues
提供的内容,我倾向于认为您没有正确使用explode
。 explode
有两个参数:
explode
知道 进行分割。您已选择|
作为分隔符。然后,该函数返回所有字符串元素的数组作为该拆分的结果。
但是,在检查您的$elementvalues
字符串时,我在字符串中看不到任何|
。因此,explode
只返回一个包含1个元素的数组 - 原始字符串本身。
有关如何使用explode
的文档可以是found here。
另外,我们从var_dump
看到的另一个奇怪的事情是$ensplit
是一个二维数组,当我们期望一维数组时。我怀疑你的$elementvalues
字符串有点古怪。
编辑 - 添加以回应OP的评论
如果没有|
作为字符串中的分隔符,您问(在评论中)应该怎么做。你问,“我没有在单词之间看到空格,他们看起来加入了打印声明。我知道如何将它们分开”
但是,除非你提供一些额外的信息或规则或字典,否则explode
如何知道你希望它们如何拆分?例如,假设我给了你以下字符串:
alvinisnowhere
我问你explode
分成单词,但我没有给你任何分隔符。 explode
会知道您是否想要
alvin
is
nowhere
或者
alvin
is
now
here
除非您提供其他信息,否则无法知道。
你可以做的另一件事是提供某种有效词汇的词典。然后,不是使用explode
,而是一次遍历$elementvalues
一个字符并继续检查是否有字典中的字符串。
下面是可能适合您的代码(适用于我)。但是,请记住以下警告:
access
和accessible
,那么我们需要调整算法要更聪明。由于看起来您的有效术语词典没有这个问题,我只是为您提供了简单而脏的代码来完成这项工作。?php
$elementvalues = "interface_errorhardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardwareaccessIPsinterface_nameinterface
_rxinterface_txinterface_errorhardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardwareaccessIPsinterface_nameinterface_rx
interface_txinterface_errorhardwareaccessIPshardwareaccessIPshardwareaccessIPshardwareaccessIPshardwareaccessIPsinterface_nameinterface_rxinter
face_txinterface_errorhardwareaccessIPsinterface_nameinterface_rxinterface_txinterface_errorhardwareaccessIPsinterface_nameinterface_rxinterfac
e_txinterface_errorhardware";
$dictionary = array(
"access",
"IPs",
"defaultgw",
"interface_name",
"interface_rx",
"interface_tx",
"interface_error",
"hardware",
"access",
"IPs",
"defaultgw",
"interface_name",
"interface_rx");
$ensplit = array();
$current_string = '';
// Traverse $elementvalues one character at a time.
for ($i = 0; $i < strlen($elementvalues); $i++) {
// $current_string gets the next character appended to it.
$current_string .= $elementvalues[$i];
if (in_array($current_string, $dictionary)) {
// If $current_string is in our dictionary of valid words,
// then add it to our $ensplit array and then reset
// $current_string back to a blank string to get ready
// for finding the next term.
array_push($ensplit, $current_string);
$current_string = '';
}
}
// Verify
print_r($ensplit);
答案 2 :(得分:-2)
编辑:学到新东西。这个答案不再有效。
您需要删除变量周围的"
。现在您将其解析为字符串。
$ensplit = explode("|", $elementvalues);
$InsertAttributes = "Insert INTO NodeAttributes (Node_ID";
foreach($ensplit as $elementname)
{
$InsertAttributes .= ", ".$elementname;
}