我正在使用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] =>
)
)
)
)
)
)
)
答案 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',
],
],
],
],
],
],
];
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 RecursiveIteratorIterator
和RecursiveArrayIterator
$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作为不保留键的第二个参数。
$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()
。