2012-04-01 14 views
1

に存在しない場合、私はこのような配列の配列持つ空白の文字列を挿入しますなど配列をエコー、キーが別の配列

[0] 
    { 
    Array[0] { First_Name => "john" } 
    Array[1] { Last_Name => "smith" } 
    Array[2] { Job => "Worker Ant" } 
    } 
[1] 
    { 
    Array[0] { First_Name => "jane" } 
    Array[1] { Last_Name => "smith" } 
    } 

ことのがpeopleArrayそれを呼ぶことにしましょう。

また、上記の例のキーと一致する"First_Name, Last_Name"などのキーの配列もあります。私はそれをheadingArrayと呼ぶでしょう。

"'john', 'smith', 'Worker Ant'"

'jane','smith',''

をそしてheadingArrayのキーだけで空の文字列にすることなく、値が設定されています

は、私はこのようにカンマで区切ってpeopleArrayをエコーし​​ます。

私はこのような何かしようとしてきた:各ヘッダを通じて

for($i=0; $i < count($headingArray); $i++){ 
    foreach($peopleArray as $row){ 
     foreach($row as $data){ 
      if(key($data) == $headingArray[$i]){ 
       echo '"'.current($data).'",';    
      } 
     } 
    } 
    //die(); 
    echo "\r\n"; 
} 

Iループをし、値を一致させようが、それは明らかに動作しません。

これを行う簡単な方法が必要です。

誰でも私を助けたり、正しい方向に向けることができますか?私はこれに数時間頭を打っています。

編集:私はこれを思いついた。それは私が必要とするすべての値をエコーが、存在しないものをスキップして、いくつかの奇妙なことを行います。

foreach($peopleArray as $person) { 
    $prevKey = array(); 
    $numItems = count($person); 
    $i = 0; 
    foreach($person as $heading) { 
     foreach($person as $key => $value) { 
      if(key($value) == $heading){ 
       echo '"'.str_replace(',',' ',current($value)).'",'; 
       $prevKey[] = key($value); 
       break; 
      } else if(in_array(key($value), $prevKey)) { 

      } else { 
       echo '"",'; 
      } 
     } 
     //die(var_dump($prevKey)); 
     $i++; 
    } 
    echo "\r\n"; 
} 

が、私はそれが存在しない場合は空白の文字列を返すためにそれを必要とします。

+0

私にはあなたは奇妙なデータ構造を持っているように見えます。なぜ配列の配列の配列の代わりに配列の配列を使用しないのですか? –

+0

if(empty(key($ data))){エコー何か; } – bksi

+0

元々はPOST varsのものでした。送信された各フォームで区切られたフォームからのすべてのデータの配列です。 – adamzwakk

答えて

1

は、オブジェクトを使用してみてください:

<?php 

class Worker 
{ 
    //without getters/setters, just idea 
    private $first_name; 
    private $last_name; 
    private $job; 

    public function __toString() 
    { 
     return "'".implode("', '", get_object_vars($this))."'"; 
    } 
} 

//let's assume we have array of Worker objects 

foreach ($Workers as $Worker) 
{ 
    print $Worker.PHP_EOL; 
} 
+0

見出しが動的なので、私はこのようにすることはできません。 – adamzwakk

0
foreach($peopleArray as $p) 
    { 
     foreach($i=0,$l=count($headingArray);$i<$l;$i++) 
      { 
       $value = isset($p[$headingArray[$i]]) ? $p[$headingArray[$i]] : ''; 
       $comma = $i<($l+1) ? ',' : ''; 
       echo '"' . $value . '"', $comma; 
      } 
     echo "\r\n"; 
    } 
+0

これはちょうど私に ""、 ""、 ""、 ""、 ""、 ""、 ""、 ""、 ""、 ""、 ""、 」、「 – adamzwakk

0

このような何かを行う必要があります。

foreach($peopleArray as $person) { 
    foreach($person as $keyValue) { 
     foreach($keyValue as $key => $value) { 
      if(in_array($key, $headingArray)) { 
       echo '"'.$value.'", '; 
      } else { 
       echo '"", '; 
      } 
     } 
    } 
    echo "\r\n"; 
} 
+0

これは単に「配列」、「配列」、「配列」、 "Array"、 "Array"、 "Array"、 "Array"、 "Array"、 "Array"、 "Array"、 "Array"、 "Array"、 – adamzwakk

+0

ああ、あなたの配列が構築されます。鍵 - 値ペアのそれぞれを別々の配列に入れています。これは必ずしも必要ではありません。すべての(First_Name、Last_Name、Job)のキーと値のペアを1つの配列に入れて、この配列を$ peopleArrayの値として直接追加してください。それから、私のコードはうまくいくはずです。 –

+0

配列構造を変更できない、または変更したくない場合は、以下を参考にしてください。内側のforeach-loopの周りに別のforeach-loopを配置すると、3つのforeach-loopを持つようになります。 1.($ peopleArray $人として) 2。($ keyValue as $ keyValue) 3.($ key => $ value) これはあなたが現在持っていると思われる配列構造で動作するはずです。 –

関連する問題