字符串连接产生奇怪的结果

时间:2018-08-01 23:24:19

标签: php concatenation concat

我已经构建了OpenCart模块,并在一些商店对其进行了测试,并且效果很好。一位客户刚刚向我报告了一个问题,在检查了html之后,我看到了:

.tpl模板文件中的代码:

<table class="table table-bordered table-hover" > 
 <tbody> 
   <?php foreach($row['strings'] as $row_string){   

     $key = $row_string['key']; 
     $id = $row['simpleFilePathEscaped'].$key;  ?>

     <tr>      

       <td class="text-center"> 
         <label><?php echo $key; ?> </label> 
       </td> 

       <td class="text-center">
         <div>
           <input  id="text_value_<?php echo $id; ?>" type="text" value="<?php echo $row_string['value']; ?>" placeholder="<?php echo $key; ?>" class="form-control" />
         </div>
       </td> 

       <td class="text-center" >
         <button  id="save_icon_<?php echo $id; ?>" onclick="addLiteralToFile('<?php echo $row['secondary_file_path_escaped'] ?>', '<?php echo $key; ?>', '<?php echo $id;?>');" class="btn btn-primary"><i id="save_inner_icon_<?php echo $id; ?>" class="fa fa-save"></i></button>
         <div id="loading_icon_<?php echo $id; ?>" <div  class="loader"></div> </div>  
       </td> 

     </tr>  
   <?php } ?> 
 </tbody>
</table>

此客户商店中的示例行的结果是:

<tr>                     
    <td class="text-center" > 
     <label>direction</label> 
    </td> 

    <td class="text-center">
     <div>
       <input id="text_value_" type="text" value="ltr" placeholder="direction" class="form-control">
     </div>
    </td> 

    <td class="text-center">
     <button id="save_icon_" onclick="addLiteralToFile('----home----admin----domains----itrend.si----public_html----test----admin----language----english----en-gb.php', 'direction', '');" class="btn btn-primary"><i id="save_inner_icon_" class="fa fa-save"></i></button>
     <div id="loading_icon_" <div="" class="loader"></div>   
    </td> 

</tr>

如果您注意到,您将看到<?php echo $id; ?>的所有实例都给出一个空字符串。因此id="save_icon_<?php echo $id; ?>"变成id="save_icon_"

这非常奇怪,因为$id$row['simpleFilePathEscaped']$key的结合。即使$row['simpleFilePathEscaped']为空,我也可以肯定地知道$key具有一个值...因为它已被回显,并且在此示例中,它是“方向”(在标签标签中)

需要一些帮助来找出发生这种情况的原因...

$row = {  "strings" => array of  {  "key"=> string,  "value"=> string }, 
          "simpleFilePathEscaped" => string, 
          "secondary_file_path_escaped" => string, 
          "primary_file_path"=> string 
} 

2 个答案:

答案 0 :(得分:0)

对不起,如果我误解了$ row的构建方式。

如果您举这样的例子

$row['strings'] = ['key' => 10];
$row['strings'] = ['key' => 110];

foreach($row['strings'] as $row_string)
$key = $row_string['key'];

print_r($key); //will give you an empty value

但是print_r($row); //将给出Array([strings] => Array(['key'] => 110))`

您需要更改foreach。

foreach($row['strings'] as $row_key => $row_string)
$key = $row_key;

然后它将在回显中给出“键”。

或者您可以

foreach($row['strings'] as $row_string)
$key = key($row_string);

答案 1 :(得分:0)

您的代码中有一个错误:

鉴于您的数组如下所示(如您的问题所述):

$row = [  "strings" => array of  {  "key"=> string,  "value"=> string }, 
          "simpleFilePathEscaped" => string, 
          "secondary_file_path_escaped" => string, 
          "primary_file_path"=> string 
]

此代码是不可能的:

<?php foreach($row['strings'] as $row_string){   

 $key = $row_string['key']; // <--- THIS is not possible with the array structure you presented
 $id = $row['simpleFilePathEscaped'].$key;  ?>

 <tr>      

   <td class="text-center"> 
     <label><?php echo $key; ?> </label> 
   </td> 

按照问题中的建议打印:

<tr>                     
<td class="text-center" > 
 <label>direction</label> 
</td> 

由于在foreach循环中,$row_string变量将保存一个字符串值,但是您正尝试使用关联键将其作为数组访问。