如果另一个数组中不存在该键,则回显数组并插入空字符串

时间:2012-04-01 15:55:24

标签: php foreach

我有一个像这样的数组:

[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 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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";
    }

答案 2 :(得分: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";
}