我有一个名称重复的功能。
如果数组键=='重复'
,我想重复数组值但我的if($ k =='repeat')比较失败了。
我的比较有什么问题?
function repeat($schema, $repeat = array()){
foreach($schema as $k => $v){
if($ k =='repeat')
第3行在重复功能中无法正常工作。
$schema = array(
array(
'tag' => 'div',
'class' => 'lines',
'repeat' => array(
'tag' => 'div',
array(
'tag' => 'span',
'style' => 'margin:10px; padding:10px',
'key' => 'title',
),
'key' => 'subject',
)
)
);
$repeat = array('Country Name' => 'Usa', 'City Name' => 'Newyork');
// Recursive String Replace - recursive_array_replace(mixed, mixed, array);
function recursive_array_replace($find, $replace, $array){
if (!is_array($array)){
return str_replace($find, $replace, $array);
}
$newArray = array();
foreach ($array as $key => $value) {
$newArray[$key] = recursive_array_replace($find, $replace, $value);
}
return $newArray;
}
function repeat($schema, $repeat = array()){
foreach($schema as $k => $v){
if($k == 'repeat'){
foreach($repeat as $rk => $rv){
$value = recursive_array_replace('title', $rk, $v);
$value = recursive_array_replace('subject', $rv, $value);
$info[] = $value;
}
}
}
//$schema = recursive_array_replace('repeat', $repeat, $schema);
return $info;
}
print_r(repeat($schema, $repeat));
UPDATE1
架构可能
$schema = array(
'tag' => 'div',
'class' => 'lines',
array(
'tag' => 'div',
'class' => 'lines',
'repeat' => array(
'tag' => 'div',
array(
'tag' => 'span',
'style' => 'margin:10px; padding:10px',
'key' => 'title',
),
'key' => 'subject',
array(
'tag' => 'span',
'style' => 'margin:10px; padding:10px',
'key' => 'title',
),
'key' => 'subject',
)
)
);
更新2
$schema = array(
array(
'tag' => 'div',
'class' => 'lines',
array(
'tag' => 'div',
'repeat' => array(
'tag' => 'div',
array(
'tag' => 'span',
'style' => 'margin:10px; padding:10px',
'key' => 'title',
),
'key' => 'subject',
)
)
)
);
答案 0 :(得分:0)
在我看来,隔离专区失败是因为您的$schema
变量没有'repeat'
密钥。
您foreach
变量中的所有项目$schema
,但是(更新前)只有一个项目:数组。更新后有三个项目,包括密钥'tag'
,'class'
和一个没有密钥的数组,因此会自动分配给0。
在这两种情况下,您都可以通过引用数组的第0项(通过'repeat'
)来获取$schema[0]['repeat']
键。
如果没有其他错误(我没有检查过),您应该替换
foreach($schema as $k => $v){
到
foreach($schema[0] as $k => $v){
这将引用嵌套数组;但是,仅在$schema
数组中没有其他数字键的情况下。
为了确保这一点,您可以首先检查哪个项目是数组,例如
foreach($schema as $item){ // this is only an auxiliary loop
if(is_array($item)){
$new_schema=$item;
break;
}
}
然后转到主循环:
foreach($new_schema as $k => $v){
等
更新后2
您需要找到自己的方式来访问'repeat'
密钥。你可以迭代地这样做。在您的代码中,您访问了错误的数组,第一级没有“重复”键,但您应该更深入。