Вывод массива и вставка пустых строк, если ключ не существует в другом массиве - PullRequest
1 голос
/ 01 апреля 2012

У меня есть массив таких массивов:

[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.

Я хочу повторить peopleArray, разделенные запятыми, как это:

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

'jane','smith',''

И значения без ключей в headingArray должны быть просто пустой строкой.

Я пробовал что-то вроде этого:

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

Где я перебираю каждый заголовок и пытаюсь сопоставить значения, но это явно не работает.

Должен быть более простой способ сделать это.

Кто-нибудь может мне помочь / направить меня в правильном направлении? Я стучу в этом в течение нескольких часов.

Редактировать: я придумал это. Он отображает все значения, которые мне нужны, но делает некоторые странные вещи, пропуская несуществующие:

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

Мне нужно вернуть пустую строку, если она не существует.

Ответы [ 3 ]

1 голос
/ 01 апреля 2012

Попробуйте использовать объекты:

<?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 голосов
/ 01 апреля 2012

Примерно так должно поступить:

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 голосов
/ 01 апреля 2012
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";
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...