【问题标题】:Comparement index name of array fails / How to compare index name of array数组的比较索引名称失败/如何比较数组的索引名称
【发布时间】:2013-08-25 20:35:23
【问题描述】:

我有一个名为 repeat 的函数。

如果数组键 == 'repeat',我想重复数组值

但是我的 if ($k == 'repeat') 比较失败了。

我的比较有什么问题?

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 是嵌套数组。你应该修改它或迭代foreach of $schema[0]
  • $schema 没有固定值,总是可以改变的。 $schema[0] 可能会在其他情况下失败。我需要比较值的索引名称
  • 您可以检查is_array($schema[0]),如果为真,则将$schema(您的本地变量)分配给$schema[0]
  • @Voitcus 在“重复”标签之前和之后可能有不同的数组 is_array 可能会失败。
  • 我无法帮助您,因为我不知道您的意图。隔间失败是因为您的$schema 变量中没有“重复”键,但$schema[0] 中存在一个。我没有测试您的代码的有效性(这就是为什么我不将其作为答案发布)

标签: php arrays multidimensional-array foreach compare


【解决方案1】:

在我看来,隔间失败是因为您的 $schema 变量没有 'repeat' 键。

您在$schema 变量中的所有项目中执行foreach,但是(更新之前)只有一项:数组。更新后有3个item,有key'tag''class',还有一个数组没有key,所以自动赋值为0。

在这两种情况下,您都可以通过引用数组的第 0 项(通过 $schema[0]['repeat'])来访问 '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' 密钥。您可以反复执行此操作。在您的代码中,您访问了错误的数组,即第一级,它没有“重复”键,但您应该更深入。

【讨论】:

  • 我怎样才能迭代地做到这一点?你能再解释一下吗?
  • 而不是在repeat 函数中进行迭代,为什么找不到'repeat' 键?这是您唯一使用的一个。在manual 中有很多在多维数组中查找特定键的示例。还要检查StackOverflow
  • 查找正常。但我找不到比较。
猜你喜欢
  • 2015-09-07
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 2015-01-12
  • 2013-08-29
  • 2021-12-10
相关资源
最近更新 更多