PHP循环遍历数组,只获取位置0的值

时间:2018-04-06 02:13:59

标签: php arrays

我正在使用PHP。我有一个数组,我需要循环它并获得数组的[0]位置(或字符串)中的所有值,我完全被难倒了。我创建了一个循环回自身的函数来尝试解析元素但是没有用。有没有一种简单的方法来遍历这个数组,只是获取不是数组的元素,以便最终看起来像这样:

Array
(
    [0] => ccrs_date
    [1] => prelim_title_report_date
    [2] => additional_escrow_deposit_date
    [3] => earnest_money_date
    [4] => acceptance_date
    [5] => contract_date
    [6] => prelim_title_report_date
)

这是我试图解析的原始数组。

Array
(
    [0] => ccrs_date
    [1] => Array
        (
            [0] => prelim_title_report_date
            [1] => Array
                (
                    [0] => additional_escrow_deposit_date
                    [1] => Array
                        (
                            [0] => earnest_money_date
                            [1] => Array
                                (
                                    [0] => acceptance_date
                                    [1] => Array
                                        (
                                            [0] => contract_date
                                            [1] => Array
                                                (
                                                    [0] => 
                                                )

                                        )

                                )

                        )

                )

        )

)

3 个答案:

答案 0 :(得分:1)

您是否尝试过使用此方法?

if (!is_array($current_element))
{
    // $current_element must be a string, since it's not an array
    echo $current_element;
}

答案 1 :(得分:0)

您可以使用递归函数来检索所需的结果。

使用数据集:

$v = [
    'ccrs_date',
    [
        'prelim_title_report_date',
        [
            'additional_escrow_deposit_date',
            [
                'earnest_money_date',
                [
                    'acceptance_date',
                    [
                        'contract_date',
                        [
                            'prelim_title_report_date',
                        ],
                    ],
                ],
            ],
        ],
    ],
];

示例:https://3v4l.org/vjERQ

function get_zero_index(array $array, &$result = [])
{
    foreach ($array as $i => $v) {
        if ($i === 0 && is_string($v)) {
            $result[] = $v;
        } elseif (is_array($v)) {
            get_zero_index($v, $result);
        }
    }

    return $result;
}

print_r(get_zero_index($v));

结果输出:

Array
(
    [0] => ccrs_date
    [1] => prelim_title_report_date
    [2] => additional_escrow_deposit_date
    [3] => earnest_money_date
    [4] => acceptance_date
    [5] => contract_date
    [6] => prelim_title_report_date
)

或者,如果您只想使用数组中的第一个元素展平多维数组,您还可以使用SPL RecursiveIteratorIteratorRecursiveArrayIterator

示例:https://3v4l.org/VEJdN

$ri = new RecursiveIteratorIterator(new RecursiveArrayIterator($v));
$result = [];
$d = null;
foreach ($ri as $k => $r) {
    if ($d !== ($cd = $ri->getDepth())) { 
        //ignore items of the same depth as the previous record
        $d = $cd;
        if ($k === 0 && is_scalar($r)) {
            //only retrieve the first record that is scalar
            $result[] = $r;
        }
    }
}    
print_r($result);

要完全展平多维数组,只需在迭代器对象上使用iterator_to_array,将false作为不保留键的第二个参数。

示例:https://3v4l.org/6Ve93

$ri = new RecursiveIteratorIterator(new RecursiveArrayIterator($v));
print_r(iterator_to_array($ri, false));

答案 2 :(得分:0)

我认为最好修复导致这个数组的基础问题。

但是,要回答您的问题,您得到的数组如下所示:

$arr = ["elem1", ["elem2", ["elem3", ["elem4", ["elem5", ["elem6", [""]]]]]]];

您可以递归检索所有第一个元素(即调用自身的函数),或迭代使用循环。

递归策略往往更整洁。但是,由于它的性质,它也消耗更多的内存。因此,对于PHP中的大型数组,不建议使用递归方法。

在任何情况下,用于“展平”数组的递归函数将是:

function accumulateFirstElem_rec($arr) {
  if (is_array($arr)) {
    return isset($arr[1]) ? array_merge([$arr[0]], accumulateFirstElem($arr[1])) : [$arr[0]];
  }

  return [];
}

虽然可能的迭代方法是:

function accumulateFirstElem_iter($arr) {
  $result = [];

  while (true) {
    array_push($result, $arr[0]);

    if (isset($arr[1]) && is_array($arr[1])) {
      $arr = $arr[1];
    } else {
      break;
    }
  }

  return $result;
}

在两个函数上调用print_r(accumulateFirstElem_iter($arr));将返回相同的结果:

Array
(
    [0] => elem1
    [1] => elem2
    [2] => elem3
    [3] => elem4
    [4] => elem5
    [5] => elem6
    [6] => 
)

如果您不想要数组中的最后一个空元素,只需关闭array_pop()