PHP 多维数组 - 获取最后一个索引中元素的值?
PHP Multidimensional Array - Get value of element in last index?
但不确定我的措辞是否正确,下面可以说明我正在努力实现更好的目标..
我有一个多维数组,我想在其中从数组 foreach 的最后一个索引捕获特定元素
数组:
[Something] => Array
(
[Something1] => Array
(
[0] => Array
(
[@attributes] => Array
(
[DataID] => Data
[DataID] => Data
[DataID] => Data
[DataID] => Data
)
[Something1.1] => Array
(
[Something1.1.1] => Array
(
[0] => Array
(
[DataID] => Data
[Date] => YYYY-MM-DD
[DataID] => Data
[DataID] => Data
[DataID] => Data
[DataID] => Data
)
[1] => Array
(
[DataID] => Data
[Date] => YYYY-MM-DD
[DataID] => Data
[DataID] => Data
[DataID] => Data
[DataID] => Data
)
[2] => Array (last returned)
(
[DataID] => Data
[DateLASTRETURNED] => YYYY-MM-DD
[DataID] => Data
[DataID] => Data
[DataID] => Data
[DataID] => Data
)
)
)
[Something1.2] => Array
(
[Something.1.2.1] => Array
(
[0] => Array
(
[DataID] => Data
[Date] => YYYY-MM-DD
[DataID] => Data
[DataID] => Data
[DataID] => Data
[DataID] => Data
)
[1] => Array
(
[DataID] => Data
[Date] => YYYY-MM-DD
[DataID] => Data
[DataID] => Data
[DataID] => Data
[DataID] => Data
)
[2] => Array (last returned)
(
[DataID] => Data
[DateLASTRETURNED] => YYYY-MM-DD
[DataID] => Data
[DataID] => Data
[DataID] => Data
[DataID] => Data
)
)
)
)
)
)
正如您在括号中看到的(最后返回的),我需要 foreach“Something1.*) 中最后返回的指定元素内的值 - 具体来说,此字段包含日期 YYYY-MM-DD 并希望存储到 $ 以在别处重复使用。
希望这是有道理的,期待一些帮助!
如果您想从“Something1.*”中的每个元素中获取最新元素。
你可以尝试这样的事情:
$array = [
'Something' => [
'Something1' => [
[
"@attributes" => array(
'DataID_1' => "Data",
"DataID_2" => "Data",
"DataID_3" => "Data",
),
"Something1.1" => array(
"Something1.1.1" => array(
array(
"DataID_1" => "data",
"Date" => "YYYY-MM-DD",
"DataID_2" => "data",
"DataID_3" => "data",
),
array(
"DataID_1" => "data",
"Date" => "YYYY-MM-DD",
"DataID_2" => "data",
"DataID_3" => "data",
),
array(
"DataID_1" => "data",
"Date" => "YYYY-MM-DD last",
"DataID_2" => "data",
"DataID_3" => "data",
),
),
),
"Something1.2" => array(
"Something1.2.1" => array(
array(
"DataID_1" => "data",
"Date" => "YYYY-MM-DD",
"DataID_2" => "data",
"DataID_3" => "data",
),
array(
"DataID_1" => "data",
"Date" => "YYYY-MM-DD",
"DataID_2" => "data",
"DataID_3" => "data",
),
array(
"DataID_1" => "data",
"Date" => "YYYY-MM-DD last",
"DataID_2" => "data",
"DataID_3" => "data",
),
),
),
],
],
],
];
$dates = [];
$something1 = $array['Something']['Something1'];
foreach ($something1 as $something_1) { // loop through 'Something1'
foreach ($something_1 as $key => $something_1_1) { // loop through each element of 'Something1'.
if (str_starts_with($key, 'Something1.')) { // if key starts with 'Something1.' PHP >= 8.0
foreach ($something_1_1 as $key => $something_1_1_1) {
$last_element = end($something_1_1_1); // get last element of array
$dates[] = $last_element['Date']; // OUTPUT: YYYY-MM-DD last
}
}
}
}
var_dump($dates); // This array will contain your dates.
// You can also use the following code to loop through dates:
foreach ($dates as $date) {
echo $date; // OUTPUT: YYYY-MM-DD last
}
//OR access the dates in the following way:
$first_date = $dates[0]; // get first date. and so on..
$last_date = $dates[count($dates) - 1]; // get last date.
请注意这些功能:
str_starts_with() 自 PHP8.0
起可用。
end() 将数组的内部指针设置为其最后一个元素。
你可以这样做。
首先访问到所需的级别,然后选择每个数组的最后一个数组,检查它是否是一个数组,然后打印值“Date”。
假设示例中的多数组存储在名为$array的变量中:
foreach($array["something"]["Something1"] as $value) {
foreach($value as $value1){
if(is_array(end($value1))) {
echo(end($value1)["Date"]);
}
}
}
如果您的多数组与您指出的示例存在偏差,您可能应该添加一些额外的验证。
已编辑 以显示将值保存到变量而不是打印它们的示例。
// First declare an array to store all values
$var = array();
// Then extract all values and save them into $var
foreach($array["something"]["Something1"] as $value) {
foreach($value as $value1){
if(is_array(end($value1))) {
array_push($var, end($value1)["Date"]); // Add the value at the end of the $var array
}
}
}
// Finally you have all values stored into the $var array
// If you know the number of values, you can access them one by one
$var[num]; // Where 'num' is the position of the value stored into the array (0,1,2...)
// Or you can loop it
foreach ($var as $date) {
// do whatever with each $date value
}
但不确定我的措辞是否正确,下面可以说明我正在努力实现更好的目标..
我有一个多维数组,我想在其中从数组 foreach 的最后一个索引捕获特定元素
数组:
[Something] => Array
(
[Something1] => Array
(
[0] => Array
(
[@attributes] => Array
(
[DataID] => Data
[DataID] => Data
[DataID] => Data
[DataID] => Data
)
[Something1.1] => Array
(
[Something1.1.1] => Array
(
[0] => Array
(
[DataID] => Data
[Date] => YYYY-MM-DD
[DataID] => Data
[DataID] => Data
[DataID] => Data
[DataID] => Data
)
[1] => Array
(
[DataID] => Data
[Date] => YYYY-MM-DD
[DataID] => Data
[DataID] => Data
[DataID] => Data
[DataID] => Data
)
[2] => Array (last returned)
(
[DataID] => Data
[DateLASTRETURNED] => YYYY-MM-DD
[DataID] => Data
[DataID] => Data
[DataID] => Data
[DataID] => Data
)
)
)
[Something1.2] => Array
(
[Something.1.2.1] => Array
(
[0] => Array
(
[DataID] => Data
[Date] => YYYY-MM-DD
[DataID] => Data
[DataID] => Data
[DataID] => Data
[DataID] => Data
)
[1] => Array
(
[DataID] => Data
[Date] => YYYY-MM-DD
[DataID] => Data
[DataID] => Data
[DataID] => Data
[DataID] => Data
)
[2] => Array (last returned)
(
[DataID] => Data
[DateLASTRETURNED] => YYYY-MM-DD
[DataID] => Data
[DataID] => Data
[DataID] => Data
[DataID] => Data
)
)
)
)
)
)
正如您在括号中看到的(最后返回的),我需要 foreach“Something1.*) 中最后返回的指定元素内的值 - 具体来说,此字段包含日期 YYYY-MM-DD 并希望存储到 $ 以在别处重复使用。
希望这是有道理的,期待一些帮助!
如果您想从“Something1.*”中的每个元素中获取最新元素。 你可以尝试这样的事情:
$array = [
'Something' => [
'Something1' => [
[
"@attributes" => array(
'DataID_1' => "Data",
"DataID_2" => "Data",
"DataID_3" => "Data",
),
"Something1.1" => array(
"Something1.1.1" => array(
array(
"DataID_1" => "data",
"Date" => "YYYY-MM-DD",
"DataID_2" => "data",
"DataID_3" => "data",
),
array(
"DataID_1" => "data",
"Date" => "YYYY-MM-DD",
"DataID_2" => "data",
"DataID_3" => "data",
),
array(
"DataID_1" => "data",
"Date" => "YYYY-MM-DD last",
"DataID_2" => "data",
"DataID_3" => "data",
),
),
),
"Something1.2" => array(
"Something1.2.1" => array(
array(
"DataID_1" => "data",
"Date" => "YYYY-MM-DD",
"DataID_2" => "data",
"DataID_3" => "data",
),
array(
"DataID_1" => "data",
"Date" => "YYYY-MM-DD",
"DataID_2" => "data",
"DataID_3" => "data",
),
array(
"DataID_1" => "data",
"Date" => "YYYY-MM-DD last",
"DataID_2" => "data",
"DataID_3" => "data",
),
),
),
],
],
],
];
$dates = [];
$something1 = $array['Something']['Something1'];
foreach ($something1 as $something_1) { // loop through 'Something1'
foreach ($something_1 as $key => $something_1_1) { // loop through each element of 'Something1'.
if (str_starts_with($key, 'Something1.')) { // if key starts with 'Something1.' PHP >= 8.0
foreach ($something_1_1 as $key => $something_1_1_1) {
$last_element = end($something_1_1_1); // get last element of array
$dates[] = $last_element['Date']; // OUTPUT: YYYY-MM-DD last
}
}
}
}
var_dump($dates); // This array will contain your dates.
// You can also use the following code to loop through dates:
foreach ($dates as $date) {
echo $date; // OUTPUT: YYYY-MM-DD last
}
//OR access the dates in the following way:
$first_date = $dates[0]; // get first date. and so on..
$last_date = $dates[count($dates) - 1]; // get last date.
请注意这些功能:
str_starts_with() 自 PHP8.0
起可用。
end() 将数组的内部指针设置为其最后一个元素。
你可以这样做。 首先访问到所需的级别,然后选择每个数组的最后一个数组,检查它是否是一个数组,然后打印值“Date”。
假设示例中的多数组存储在名为$array的变量中:
foreach($array["something"]["Something1"] as $value) {
foreach($value as $value1){
if(is_array(end($value1))) {
echo(end($value1)["Date"]);
}
}
}
如果您的多数组与您指出的示例存在偏差,您可能应该添加一些额外的验证。
已编辑 以显示将值保存到变量而不是打印它们的示例。
// First declare an array to store all values
$var = array();
// Then extract all values and save them into $var
foreach($array["something"]["Something1"] as $value) {
foreach($value as $value1){
if(is_array(end($value1))) {
array_push($var, end($value1)["Date"]); // Add the value at the end of the $var array
}
}
}
// Finally you have all values stored into the $var array
// If you know the number of values, you can access them one by one
$var[num]; // Where 'num' is the position of the value stored into the array (0,1,2...)
// Or you can loop it
foreach ($var as $date) {
// do whatever with each $date value
}