【发布时间】:2014-06-11 12:40:03
【问题描述】:
我正在尝试遍历一个多维数组,如果条件匹配,则该数组的所有元素都应存储到一个以匹配条件命名的新数组中。
$unique_states = array_unique($allstates);
$total = count($states);
for($i = 0; $i < $total; $i++){
foreach($unique_states as $keys => $values){
if(($states[$i][3] == $values)){
$values[] = $states[$i];
}
}
}
$states 是包含所有内容的巨型数组。当我遍历数组时,如果匹配此条件if(($states[$i][3] == $values)),则应创建一个名为$values 的新数组。
当我运行代码和print_r($values) 时,我得到Fatal error: [] operator not supported for strings。当我将名称更改为完全不同的名称时,我只需在 $states 中获取所有数组。
不知道该怎么做。
编辑:
当我删除foreach 循环并像这样插入$values 的实际值时
if(($states[$i][3] == 'state1')){
$states1[] = $states[$i];
}
if(($states[$i][3] == 'state2')){
$states2[] = $states[$i];
}
效果很好。但是在我有多个状态的情况下,上面的代码将不够高效,并且每次添加新状态时都需要我进行更改。 我需要返回一个包含整个元素的数组..即 $states[$i][3] 匹配的 $states[$i]。
来自 $states 输入的数据示例:
Array
(
[0] => Array
(
[0] => firstname1
[1] => lastname1
[2] => Armstrong Landscaping
[3] => state1
[4] => email1
[5] => address1
)
[1] => Array
(
[0] => firstname2
[1] => lastname2
[2] => Armstrong Landscaping
[3] => state1
[4] => email2
[5] => address2
)
[2] => Array
(
[0] => firstname3
[1] => lastname3
[2] => Armstrong Landscaping
[3] => state1
[4] => email3
[5] => address3
)
[3] => Array
(
[0] => firstname4
[1] => lastname4
[2] => Cannon Heathcare Center
[3] => state2
[4] => email4
[5] => address4
)
[4] => Array
(
[0] => firstname5
[1] => lastname5
[2] => Cannon Heathcare Center
[3] => state2
[4] => email5
[5] => address5
)
示例输出应如下所示
Array
(
[state1] => Array
(
[0] => Array
(
[0] => firstname1
[1] => lastname1
[2] => Armstrong Landscaping
[3] => state1
[4] => email1
[5] => address1
)
[1] => Array
(
[0] => firstname2
[1] => lastname2
[2] => Armstrong Landscaping
[3] => state1
[4] => email2
[5] => address2
)
Array
(
[state2] => Array
(
[0] => Array
(
[0] => firstname1
[1] => lastname1
[2] => Armstrong Landscaping
[3] => state2
[4] => email1
[5] => address1
)
[1] => Array
(
[0] => firstname2
[1] => lastname2
[2] => Armstrong Landscaping
[3] => state2
[4] => email2
[5] => address2
)
【问题讨论】:
-
如果 $values 等于,例如,'thevalue',那么你正在做的是:thevalue[] = $states[$i],这是错误的。所以你需要在开头添加 '$' 或者换句话说 $$values[] = $states[$i]
-
@Andrew 同样的错误仍然存在。
Fatal error: [] operator not supported for strings -
如果您对数组使用动态名称,请在动态名称周围添加括号:${$values}[] = ... 如果您只使用单个变量,则不需要括号跨度>
-
您有一个多维数组,您确定 $keys 和 $values 来自 $unique_states 数组的正确级别吗?
-
$unique_states 数组的内容是什么?就在第一个(for)循环之前, print_r 它是数据