2012-01-24 13 views
0

私は、文字の区切りで配列を暗黙にすることを必要とするプロジェクトに取り組んでいます。プロジェクトの他の部分でもjoinimplodeを同じ意味で使用していますが、このセクションでは動作しません。文字列の先頭からPHP配列の暗黙文字を削除するには

$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; 
    } 

結果がこれです:

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

代わりの

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

私は周りを二重引用符の代わりに単一引用符を使用してみました '.chr(149)。'。私はカンマやバー、またはスペースだけを使ってみました。私はトリミングのさまざまな方法を試してきたし、トリミングしない$catdata->name

また、文字列連結を試してみることも考えましたが、最初の文字列ではなく末尾に余分な文字が追加されます。 Implodeまたはjoinが良い方法です。

私には何が欠けていますか?

+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文の外側でimplodeを動かすと、助けになりました! – 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

関連する問題