我正在尝试写csv。
使用此功能,如果没有写任何其他值
,我需要面颊我尝试过使用空,preg_match,strlen,但我总是得到一个或另一个
所以我需要检查$v->Klasifikacija
是否为空,然后输入$v->BrojArtikla
我怎么能这样做?
现在我得到了它,但不明白为什么:
if (strlen(trim((string)$v->Klasifikacija)) < 4) {
如果你可以向我解释一下这个问题?
elseif ($v3 == 'Referenca') {
if (preg_match('/\S/', $v->Klasifikacija)) {
$b .= $v->BrojArtikla . DELIMITER;
$v->$v3 = $v->BrojArtikla;
} else {
$b .= $v->Klasifikacija . DELIMITER;
$v->$v3 = $v->Klasifikacija;
}
}
这是用于传递XML文件的完整代码
function parsing_xml($supplier_name,$xml_url,$opsi='string'){
$xml = simplexml_load_file(utf8_encode($xml_url), 'SimpleXMLElement', LIBXML_NOCDATA);
//$xml = simplexml_load_file($xml_url, 'SimpleXMLElement', LIBXML_NOCDATA);
if(!$xml){echo "xml $xml_url not loaded.";exit;}
$i=0;
$string="";
foreach($xml as $k=>$v){
$b="";
if($i==0){
foreach($v as $k1=>$v1){
$head[]=$k1;
}
array_push($head,"dugi_opis","meta_description","meta_tag","tax","supplier","quantity","price","Referenca");
//array_push($head,"dugi_opis","meta_description","meta_tag","tax","supplier","quantity","price","Referenca");
foreach($head as $k4=>$v4){
$b.= "$v4".DELIMITER;
}
}//echo $xml->$k->BrojArtikla."=>".$xml->$k->Image."<pre>".print_r($head,1)."</pre>";
foreach($head as $k3=>$v3){
if($v3=='meta_description'){$v3='Naziv';}
if(empty($v->$v3) or $v->$v3=="" or !isset($v->$v3)){
$v->$v3="|||";
}
if($v3=='tax'){
$b.=TAX.DELIMITER;
$v->$v3=TAX;
}elseif($v3=='supplier'){
$b.=$supplier_name.DELIMITER;
$v->$v3=$supplier_name;
}elseif($v3=='quantity'){
if($v->Status=="Dostupno"){
//if($v->Status=='Raspoloživo'){
$b.="2".DELIMITER;
$v->$v3=2;
}else{
$b.="0".DELIMITER;
$v->$v3=0;
}
}elseif($v3=='Akcija'){
$b.= (string) floatval($v->$v3).DELIMITER;
$v->$v3= (string) floatval($v->$v3);
}elseif($v3=='NetoPrice'){
$b.= (string) floatval($v->$v3).DELIMITER;
$v->$v3= (string) floatval($v->$v3);
}elseif($v3=='ListPrice'){
$b.= (string) floatval($v->$v3).DELIMITER;
$v->$v3= (string) floatval($v->$v3);
}elseif($v3=='Rabat'){
$b.= (string) floatval($v->$v3).DELIMITER;
$v->$v3= (string) floatval($v->$v3);
}elseif($v3=='price'){
$b.= (string) floatval($v->NetoPrice)*MARZA.DELIMITER;
$v->$v3=(string) floatval($v->NetoPrice)*MARZA;
}
elseif($v3=='meta_tag'){
$b.=$v->Klasifikacija.','.$v->Proizvodjac.DELIMITER;
$v->$v3=$v->Klasifikacija.','.$v->Proizvodjac;
}
elseif($v3=='Referenca'){
//if(empty($v->Klasifikacija)){
//if(strlen($v->Klasifikacija)===0){
///if(preg_match('/\S/',$v->Klasifikacija)){
//if(isset($v->Klasifikacija) || $v->Klasifikacija === ''){
//if(isset($v->Klasifikacija)){
//if(strlen($v->Klasifikacija) < 2){
if(trim($v->Klasifikacija) === ''){
$b.=$v->BrojArtikla.DELIMITER;
$v->$v3=$v->BrojArtikla;
//$b.=$v->Klasifikacija.DELIMITER;
// $v->$v3=$v->Klasifikacija;
}else{
//$b.=$v->BrojArtikla.DELIMITER;
//$v->$v3=$v->BrojArtikla;
$b.=$v->Klasifikacija.DELIMITER;
$v->$v3=$v->Klasifikacija;
}
}
// ovo za sad nije potrebno
// elseif($v3=='dugi_opis'){
// $b.=$v->dugi_opis.DELIMITER;
// $v->$v3=$v->dugi_opis;
// }
else{
$b.=$v->$v3.DELIMITER;
}
}
$supplier_item[(string)$v->BrojArtikla]=$v;
$b=substr($b,0,-1);
$b=str_replace("'","\'",$b);
$b=str_replace('"','\"',$b);
$b=str_replace("\n"," ",$b);
$i++;
$string.="\n$b";
}
if($opsi=='string'){
return $string;
}elseif($opsi=='supplier_item'){
return $supplier_item;
}else{
$z['string']=$string;
$z['supplier_item']=$supplier_item;
return $z;
}
}
答案 0 :(得分:2)
$v->Klasifikacija
的类型是什么?如果它不是一个字符串(它可能是一个SimpleXMLElement
实例),那么也许你应该将它转换为一个字符串并在之后检查是否为空。请尝试var_dump($v->Klasifikacija)
确定类型。也许你在这里有多个问题。你可以做点什么
$stringValue = (string) $v->Klasifikacija;
$stringValue = trim($stringValue);
if (strlen($stringValue) == 0)) {
// ...
}
另请注意,empty
的{{1}}为true
!
顺便说一下,使用PHPs CSV functions可以节省大量时间!
答案 1 :(得分:2)
检查字符串是否为空的最佳方法是使用strlen。
小心empty对字符串“0”返回true。
$a = "";
$b = "0";
echo empty($a), " ", empty($b), " ", strlen($a), " ", strlen($b), "\n";
//OUTPUT: 1, 1, 0, 1
如果要考虑只有空格的字符串,请查看trim PHP方法。你的情况将是:
if (0 == strlen(trim($v->Klasifikacija))) {}
答案 2 :(得分:0)
如果$ v-&gt; Klasifikacija是一个字符串,那么试试这个......
elseif($v3=='Referenca'){
if(empty($v->Klasifikacija)){
$b.=$v->BrojArtikla.DELIMITER;
$v->$v3=$v->BrojArtikla;
}else{
$b.=$v->Klasifikacija.DELIMITER;
$v->$v3=$v->Klasifikacija;
}
}
你也可以查看$ v-&gt; Klasifikacija ==&#39;&#39;或strlen($ v-&gt; Klasifikacija)&gt; 0等......