Php 数组的比较索引名失败/如何比较数组的索引名
我有一个函数名为repeat 如果数组键=='repeat',我想重复数组值 但是我的if($k=='repeat')比较失败 我的比较有什么问题Php 数组的比较索引名失败/如何比较数组的索引名,php,arrays,multidimensional-array,foreach,compare,Php,Arrays,Multidimensional Array,Foreach,Compare,我有一个函数名为repeat 如果数组键=='repeat',我想重复数组值 但是我的if($k=='repeat')比较失败 我的比较有什么问题 function repeat($schema, $repeat = array()){ foreach($schema as $k => $v){ if($k=='repeat') 第三行在重复功能内工作不正常 $schema = array( array( 'tag' => 'div',
function repeat($schema, $repeat = array()){
foreach($schema as $k => $v){
if($k=='repeat')
第三行在重复功能内工作不正常
$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));
更新1
模式可能是
$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',
)
)
)
);
在我看来,由于
$schema
变量没有'repeat'
键,所以隔离区失败
您可以对$schema
变量中的所有项执行foreach
,但是(更新之前)只有一项:数组。更新后有三个项,分别有键'tag'
,'class'
,还有一个数组没有键,因此它会自动分配给0
在这两种情况下,您都可以通过引用数组的第0项(通过$schema[0]['repeat']
)来访问'repeat'
键
如果没有其他错误(我没有检查),您应该更换
foreach($schema 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'
键。您可以迭代地执行此操作。在您的代码中,您访问了错误的数组,第一级没有“repeat”键,但您应该更深入。您的$schema
是嵌套数组。您应该修改它或迭代$schema[0]
$schema的foreach
,$schema没有常量值,始终可以更改$架构[0]可能会在其他情况下失败。我需要比较值的索引名。您可以检查是否为数组($schema[0])
,如果为true,则将$schema
(您的局部变量)分配给$schema[0]
@Voitcus在“repeat”标记前后可能有不同的数组。数组可能会失败。我无法帮助您,因为我不知道您的意图是什么。由于$schema
变量中没有“repeat”键,但$schema[0]
中存在一个,因此该分区失败。我并没有测试你们的代码的有效性(这就是为什么我不把它作为一个答案发布的原因),我怎么能迭代地这样做呢?你能再解释一下吗?与其在repeat
函数中迭代,为什么不找到“repeat
”键?这是你唯一使用的。在这本书中,有很多在多维数组中查找特定键的例子。同时检查结果是否正常。但是我找不到可以比较的。
foreach($new_schema as $k => $v){