[英]fetch value from array within array within array
我在理解數組時遇到麻煩。 例如,我得到了以下數據。
array(
label=> person1
start=> 2014-10-10
end=> 2014-10-11
class=> annual
)
array(
label=> person2
start=> 2014-10-08
end=> 2014-10-08
class=> sick
)
array(
label=> person1
start=> 2014-10-01
end=> 2014-10-03
class=> sick
)
array(
label=> person3
start=> 2014-10-20
end=> 2014-10-20
class=> annual
)
array(
label=> person1
start=> 2014-10-29
end=> 2014-10-29
class=> compassionate
)
我想這樣安排
array(
[person1]=>array(
array(
start=> 2014-10-10
end=> 2014-10-11
class=> annual),
array(
start=> 2014-10-01
end=> 2014-10-03
class=> sick),
array(
start=> 2014-10-29
end=> 2014-10-29
class=> compassionate),
),
[person2]=>array(
start=> 2014-10-08
end=> 2014-10-08
class=> sick),
[person3]=>array(
start=> 2014-10-20
end=> 2014-10-20
class=> annual)
)
我的要求是在同一行中顯示帶有相同標簽的數據。 這是我使用的代碼,但是根本不起作用。
var $blocks = array();
var $data = array();
var $blocksByLabel = array();
global $blocksByLabel;
global $blocks;
foreach($this->data as $d) {
foreach ($this->blocks as $block) {
$label = $block->$d['label'];
if (!array_key_exists($d['label'], $blocksByLabel)){
$blocksByLabel[$block->label] = array();
}
array_push($blocksByLabel[$block->label], $blocks);
}
$this->blocks[] = array(
'label' => $d['label'],
'start' => $start = strtotime($d['start']),
'end' => $end = strtotime($d['end']),
'class' => @$d['class']
);
用這個:
$old_array
是源數組,而$new_array
是重新排列的數組
foreach($old_array as $r) {
$new_array[$r['label']][] = array("start" => $r['start'],
"end" => $r['end'],
"class" => $r['class']);
}
這應該按照您想要的方式排列數組。並且您應該根據變量名重命名old_array和new_array。
附加的運行程序,以進一步說明
這是我的運行代碼:
<?php
$old_array[] = array("label" => "person1", "start" => "2014-10-10", "end" => "2014-10-11", "class" => "anual");
$old_array[] = array("label" => "person2", "start" => "2014-10-08", "end" => "2014-10-08", "class" => "sick");
$old_array[] = array("label" => "person1", "start" => "2014-10-01", "end" => "2014-10-03", "class" => "sick");
$old_array[] = array("label" => "person3", "start" => "2014-10-20", "end" => "2014-10-20", "class" => "anual");
$old_array[] = array("label" => "person1", "start" => "2014-10-29", "end" => "2014-10-29", "class" => "compassionate");
foreach($old_array as $r) {
$new_array[$r['label']][] = array("start" => $r['start'],
"end" => $r['end'],
"class" => $r['class']);
}
echo "<pre>";
print_r($new_array);
echo "</pre>";
?>
執行后,輸出應為:
Array
(
[person1] => Array
(
[0] => Array
(
[start] => 2014-10-10
[end] => 2014-10-11
[class] => anual
)
[1] => Array
(
[start] => 2014-10-01
[end] => 2014-10-03
[class] => sick
)
[2] => Array
(
[start] => 2014-10-29
[end] => 2014-10-29
[class] => compassionate
)
)
[person2] => Array
(
[0] => Array
(
[start] => 2014-10-08
[end] => 2014-10-08
[class] => sick
)
)
[person3] => Array
(
[0] => Array
(
[start] => 2014-10-20
[end] => 2014-10-20
[class] => anual
)
)
)
為重新安排數組的代碼工作正常。請檢查您的$this->data
通過可變var_dump($this->data)
來檢查變量的內容。(如果源陣列不具有價值,當然結果也將沒有任何價值)。
希望這可以幫助..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.