2012-01-24 74 views
0

我正在处理需要用字符分隔对数组进行内插的项目。我在项目的其他部分已经成功地使用了joinimplode,但是我无法在本节中使用它。如何从字符串开头删除PHP Array Implode字符

$dbQuery = "SELECT ftc.*, fc.name 
      FROM facilities f 
      LEFT JOIN facility_to_category ftc ON f.fid = ftc.fid 
      LEFT JOIN facility_categories fc ON ftc.cid = fc.cid 
      WHERE f.listing_year = '2011' 
       AND fc.parent_cid = '2' 
       AND f.fid = ('".$listing_fid."')"; 
    $dbResult = $dbc->query($dbQuery,__FILE__,__LINE__); 
    $num_results = $dbc->num_rows($dbResult); 
    echo '<h3>Demographics</h3> 
    <div>'; 
    while($catdata = $dbc->fetch($dbResult)) { 
     $demographics = array(); 
     $demographic_names = array('',trim($catdata->name)); 
     $demographics = implode(' '.chr(149).' ',$demographic_names); 
     print $demographics; 
    } 

结果是这样的: '.CHR(149)' 的

Demographics 
• Affluent • Children • Hard-to-Reach • Parents 

代替

Demographics 
Affluent • Children • Hard-to-Reach • Parents 

我已经使用了双引号,而不是单引号括起来尝试。我试过用逗号或者小节或者空格。我尝试过不同的修剪方式,而不是修剪$catdata->name

我也想过尝试字符串连接,但最后我会在最后加上一个额外的字符而不是开头。 Implodejoin似乎是更好的方法。

我缺少什么?

+0

'$ demographic_names [0]'为空吗?另外,为什么你要设置'$ demographics = array();'然后几乎立即把它变成一个字符串? –

回答

1

谢谢大家,为您的帮助!我结束了重新格式化查询和数组。下面是最终代码:

$dbQuery = "SELECT ftc.*, fc.name 
      FROM facilities f 
      LEFT JOIN facility_to_category ftc ON f.fid = ftc.fid 
      LEFT JOIN facility_categories fc ON ftc.cid = fc.cid 
      WHERE f.listing_year = '2011' 
       AND fc.parent_cid = '2' 
       AND f.fid = ('".$listing_fid."')"; 
    $dbResult = $dbc->query($dbQuery,__FILE__,__LINE__); 
    $num_results = $dbc->num_rows($dbResult); 
    echo '<h3>Demographics</h3> 
    <div>'; 
    while($catdata = $dbc->fetch($dbResult)) { 
     $demographics = array(); 
     if (is_array($demographics)) { 
     $demographic_names[] = trim($catdata->name); 
     } 
    } 
    $demographics = join(' '.chr(149).' ',$demographic_names);   
    print $demographics; 

结果是:

Demographics 
Affluent • Children • Hard-to-Reach • Parents 

希望这会有所帮助别人!

1

我不知道我明白你正在尝试做的,但为什么不使用

$demographics_names = array(); 
while($catdata = $dbc->fetch($dbResult)) { 
    array_push($demographics_names, trim($catdata->name)); 
} 
$demographics = implode(' '.chr(149).' ',$demographic_names); 
print $demographics; 
+0

移动while语句之外的内爆帮助! – deewilcox

0

你插入一个空白元素到数组,你爆:

$demographic_names = array('',trim($catdata->name)); 
          ^--- here 
+0

谢谢 - 我尝试删除它,但它以某种方式阻止了加入角色的工作。结果是AffluentChildrenHard-to-ReachParents – deewilcox

+0

这是因为你的'$ demographic_names'数组中只有1个元素。 'implode()'只会将连接字符放在2个元素之间。使用@ JeromeWAGNER的答案。 – FtDRbwLXw6

0

似乎你有一个空白demographic_name。在生成的阵列上使用array_filter

0

检查第一个数组是否为空。

while($catdata = $dbc->fetch($dbResult)) { 
    $demographics = array(); 
    $demographic_names = array('',trim($catdata->name)); 
    if(!empty($demographic_names)) 
    { 
     $demographics = implode(' '.chr(149).' ',$demographic_names); 
     print $demographics; 
    } 
} 
+0

这是一个好主意 - 我会尝试 – deewilcox

相关问题