我有以下数组(例如,实数组更大)
Array
(
[0] => Array
(
[984ab6aebd2777ff914e3e0170699c11] => Array
(
[id] => 984ab6aebd2777ff914e3e0170699c11
[message] => Test1
)
[1] => Array
(
[ca403872d513404291e914f0cad140de] => Array
(
[id] => ca403872d513404291e914f0cad140de
[message] => Test2
)
)
[2] => Array
(
[ca403872d513404291e914f0cad140de] => Array
(
[id] => ca403872d513404291e914f0cad140de
[message] => Test3
)
[3] => Array
(
[ca403872d513404291e914f0cad140de] => Array
(
[id] => ca403872d513404291e914f0cad140de
[message] => Test4
)
)
)现在,我想以某种方式“访问”具有给定id的子数组,例如,访问ID为984ab6aebd2777ff914e3e0170699c11的子数组,然后继续在这样的foreach中使用此数组。
foreach ($array_with_specific_id as $event) {
echo $event['message'];
}这个是可能的吗?
编辑:
在我的模型中生成数组的DB代码:
public function get_event_timeline($id)
{
$data = array();
foreach ($id as $result) {
$query = $this->db->query("SELECT * FROM event_timeline WHERE id = ?", array($result['id']));
foreach ($query->result_array() as $row)
{
array_push($data, array($row['id'] => $row));
}
}
return $data;
}发布于 2013-02-06 00:44:27
当从数据库填充您的数组时,您可以验证一个额外的$index数组,如下所示:
$index = array (
'984ab6aebd2777ff914e3e0170699c11' => ReferenceToElementInData,
'ca403872d513404291e914f0cad140de' => ReferenceToElementInData,
// ...
)这可以让您通过元素的id快速访问元素,而不需要额外的foreach循环。当然,它将需要额外的内存,但这应该是可以的,因为您将只保存对原始数据的引用。但是,对其进行测试。
下面是一个示例:
public function get_event_timeline($id)
{
$data = array();
// create an additional index array
$index = array();
// counter
$c=0;
foreach ($id as $result) {
$query = $this->db->query("SELECT * FROM event_timeline WHERE id = ?", array($result['id']));
// every entry in the index is an array with references to entries in $data
$index[$result['id']] = array();
foreach ($query->result_array() as $row)
{
array_push($data, array($row['id'] => $row));
// create an entry in the current index
$index[$row['id']][] = &$data[$c];
$c++;
}
}
return array (
'data' => $data,
'index' => $index
);
}现在,您可以通过索引数组访问元素,而无需额外的foreach循环:
$entry = $index['984ab6aebd2777ff914e3e0170699c11'][0];如果每个$id有多个结果(如您在注释中提到的,您可以使用大于零的索引来访问它们:
$entry = $index['984ab6aebd2777ff914e3e0170699c11'][1];
$entry = $index['984ab6aebd2777ff914e3e0170699c11'][2];您可以通过调用以下方法获取每个$id的项目数
$number = count($index['984ab6aebd2777ff914e3e0170699c11']);这与数据库中用于加快查询速度的索引非常相似。
发布于 2013-02-06 00:37:05
我可能只是去掉了包含数组,因为它看起来不必要。但是,您可以执行以下操作:
function get_message($specific_id, $arrays) {
foreach($arrays as $array) {
if(in_array($specific_id, $array)) {
return $array['message'];
}
}
}我还没有机会测试它,但它应该可以工作。
发布于 2013-02-06 00:44:13
function doTheJob($inputArray, $lookingFor) {
foreach ($inputArray as $subArray) {
foreach ($subArray as $subKey => $innerArray) {
if ($subKey == $lookingFor) {
return $innerArray;
}
}
}
return NULL;
}或者,您可以使用array_filter而不是外部foreach。
https://stackoverflow.com/questions/14712279
复制相似问题