PHP连接跳过空值的行

时间:2013-07-12 08:52:15

标签: php concatenation

我正在尝试连接一个数组,但是当PHP遇到一个空数组项时,它会停止连接。

我的数组看起来像这样:

Array
(
    [0] => Array
        (
            [0] => Test1
            [1] => Test1
            [2] => 
        )
    [1] => Array
        (
            [0] => Test2
            [1] => Test2
            [2] => 
        )
    [2] => Array
        (
            [0] => Test3
            [1] => Test3
            [2] => Test3
        )
)

前两个Array-item上的第3项是空的。当我像这样循环它们时:

$keys = array('uid', 'type', 'some_column', 'other_column');
foreach ($csv as $i => $row) {
    $uid = $row[0] . $row[1] . $row[2];
    array_unshift($row, $uid);
    $csv[$i] = array_combine($keys, $row);
}

我只返回Test3Test3Test3,而不是预期的

Test1Test1
Test2Test2
Test3Test3Test3

因此,当连接空值时,PHP似乎正在跳过项目 这是正常的PHP行为吗?如果是这样,我该如何解决这个问题?

5 个答案:

答案 0 :(得分:1)

试试这个:

$uid = array();
foreach ($array as $i => $row) {
    $uid[] = $row[0] . $row[1] . $row[2];
}
var_dump($uid);

输出:

Array
(
    [0] => Test1Test1
    [1] => Test2Test2
    [2] => Test3Test3Test3
)

您可以执行类似的操作来生成字符串:

$uid = '';
foreach ($arr as $i => $row) {
    $uid .= $row[0] . $row[1] . $row[2] . "\n";
}
echo $uid;

输出:

Test1Test1
Test2Test2
Test3Test3Test3

答案 1 :(得分:1)

尝试

$uid = array();
foreach ($array as $i => $row) {
    $uid[] = $row[0] . $row[1] . $row[2];
}
var_dump($uid);

只是您正在提供$uid并将其作为variable类型,并将最后一次出现的循环追加到该变量中。如果您需要所需的输出你需要在之前将它声明为array

答案 2 :(得分:1)

对不起,但是如果 是你想要的输出,你就会过度复杂化:

$foo = array(
    array("Test1","Test1"),
    array("Test2","Test2"),
    array("Test3","Test3","Test3")
);
echo implode(PHP_EOL,
             //implode all child arrays, by mapping, passes no delimiter
             //behaves as concatenation
             array_map('implode',$foo)
);

返回:

Test1Test1
Test2Test2
Test3Test3Test3

在您的情况下,您可以像这样使用此代码的位:

$csv = array(array("Test1","Test1",''),array("Test2","Test2",''),array("Test3","Test3","Test3"));
$keys = array('uid', 'type', 'some_column', 'other_column');
foreach($csv as $k => $row)
{
    array_unshift($row,implode('',$row));
    $csv[$k] = array_combine($keys,$row);
}

给出:

Array
(
    [0] => Array
        (
            [uid] => Test1Test1
            [type] => Test1
            [some_column] => Test1
            [other_column] => 
        )

    [1] => Array
        (
            [uid] => Test2Test2
            [type] => Test2
            [some_column] => Test2
            [other_column] => 
        )

    [2] => Array
        (
            [uid] => Test3Test3Test3
            [type] => Test3
            [some_column] => Test3
            [other_column] => Test3
        )

)

答案 3 :(得分:0)

获得预期的输出

$uid = "";
foreach ($array as $i => $row) {
    $uid .= $row[0] . $row[1] . $row[2] . "\n";
}
echo $uid;

答案 4 :(得分:0)

您需要使用两个foreach循环..

步骤:

  1. 初始化您的第一个foreach循环,以获取每个数组的key => value as $key=> $value
  2. 然后将第二个循环初始化为$value变量,因为此内部的值是另一个数组key => value = $innerKey => $innerValue
  3. 然后在第二个循环中回显$ innerValue以显示辅助数组
  4. 内的值
  5. 最后在第一个循环中放入一个echo '<br/>',将每个辅助数组放入另一个换行符。
  6. $data = array(
                    0 => array(
                        0 => 'Test1',
                        1 => 'Test1',
                        2 => ''
                    ),
                    1 => array(
                         0 => 'Test2',
                         1 => 'Test2',
                         2 => ''
                    ),
                    2 => array(
                         0 => 'Test3',
                         1 => 'Test3',
                         2 => 'Test3'
                    )
                );
    
       foreach($data as $key => $value){
           foreach($value as $innerKey => $innerValue){
               echo $innerValue;
    
           }
           echo '<br/>';
    
       }
    
    // Output would be..
    Test1Test1
    Test2Test2
    Test3Test3Test3
    

    代码测试时间:PHP Fiddle