对多维数组行及其相应元素进行计数


Counting multidimensional array rows and their respective elements?

我正在做的事情可能太长,很奇怪,无法解释,但基本上我已经以复杂的方式将字符串映射到数组中,使它们混乱不堪。这是一个看起来如何的例子:

field[26][25]='x';
field[24][23]='z';
field[28][29]='y';

既然我已经成功地按照我想要的方式把字符串弄乱了,我需要重建线性结果。

因此,我需要取数组的第1行,并循环遍历该行中的所有元素,将它们组合成一个字符串。然后对第2行执行相同的操作,依此类推,创建一个巨大的线性字符串。

如何计算这些行中有多少行和元素?就我的一生而言,我甚至无法开始找到如何为多阵列做到这一点。

亲切问候

@u_mulder在那里得到了一个可靠的答案。对于元素的数量,你只需要说:

$total = 0;
foreach( $matrix as $row ) $total += count($row); 

对于元素的串联,您只需说:

$concat = '';
foreach( $matrix as $row ) $concat .= implode('', $row);

鲍勃是你的叔叔。但是,对于这样一个奇怪的mashup,真的有一个有效的用例吗?

$field[26][25]='x';
$field[24][23]='z';
$field[28][29]='y';
$field_string = '';
array_walk_recursive ( $field , function($item, $key) use (&$field_string){
if(!is_array($item)){
    $field_string .= $item;
}
});
echo $field_string;

老实说,这有点令人困惑。我可能需要更多信息,但请告诉我这是否有助于

您可以从一个空字符串开始,使用两个嵌套的foreach迭代每行上的行和项,并将每个项附加到字符串中:

$result = '';
foreach ($fields as $row) {
    foreach ($row as $item) {
        $result .= $item;
    }
}

也可以将整个内部foreach替换为$result .= implode('', $row);

您甚至可以将外部foreach替换为对array_map()的调用,然后将implode()array_map()生成的数组转换为字符串:

$string = implode(
    '',
    array_map(
        function (array $items) {
            return implode('', $items);
        },
        $fields
    )
);