0

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

我的数组如下所示:

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

前 2 个数组项的第 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 行为吗?如果是这样,我该如何解决这个问题?

4

5 回答 5

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
于 2013-07-12T08:55:07.053 回答
1

试试喜欢

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

只是你给$uid它,它把它当作一种类型variable,它将最后一次出现的循环附加到那个变量中。如果你想要你想要的输出,你需要将它声明为array之前。

于 2013-07-12T08:55:25.763 回答
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)
);

回报:

测试1测试1
测试2测试2
测试3测试3测试3

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

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

给出:

大批
(
    [0] => 数组
        (
            [uid] => Test1Test1
            [类型] => 测试1
            [some_column] => 测试1
            [其他列] =>
        )

    [1] => 数组
        (
            [uid] => Test2Test2
            [类型] => 测试2
            [some_column] => Test2
            [其他列] =>
        )

    [2] => 数组
        (
            [uid] => Test3Test3Test3
            [类型] => Test3
            [some_column] => Test3
            [other_column] => 测试3
        )

)
于 2013-07-12T09:17:00.557 回答
0

获得预期的输出

$uid = "";
foreach ($array as $i => $row) {
    $uid .= $row[0] . $row[1] . $row[2] . "\n";
}
echo $uid;
于 2013-07-12T08:58:48.930 回答
0

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

程序:

  1. 初始化您的第一个 foreach 循环以获取其中key => value as $key=> $value的每个数组。
  2. 然后将第二个循环初始化为$value变量,因为其中的值是另一个数组key => value= $innerKey => $innerValue
  3. 然后在第二个循环中 echo $innerValue 以显示辅助数组中的值
  4. 最后echo '<br/>'在您的第一个循环中放置一个,将每个辅助数组放入另一个换行符。

.

$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

于 2013-07-12T09:20:39.363 回答