【问题标题】:Populate an array from an other array从另一个数组填充一个数组
【发布时间】:2017-05-09 17:37:52
【问题描述】:

我在尝试根据其他数组填充数组时遇到问题...让我向您解释一下问题

我有这个数组

$contents = (
    [0] => Array
        (
            [id] => 1
            [title] => Text1
            [slug] => text1
        )
 [1] => Array
        (
            [id] => 2
            [title] => Text2
            [slug] => text2
        )
 [2] => Array
        (
            [id] => 3
            [title] => Text3
            [slug] => text3
        )
 [3] => Array
        (
            [id] => 4
            [title] => Text3
            [slug] => text3
        )

)

然后我在上面的 slugs 的数组中创建了一个变量 $st

foreach($contents as $key => $value) {
        $st[$key] = $value['slug'];
    } 

然后我从内部代码点火器中提取了 uri 段

$path = $this->uri->segment(1);

然后我从 $st 数组中取出 $path 的值:

if(($key = array_search($path, $st)) !== false) {
        unset($st[$key]);
    }

然后我把$st数组用

$stack = array_values($st);

最终我遍历了新数组,看看里面是否有值,如果是,我像这样推入相对数组中:

 $per[] = array();
 while($i < count($contents)) {
        if(in_array($path, $stack) === FALSE) {
            array_push($per, $percorsi[$i]);
        }
        $i++;
    } 

最后我有一个空数组,如果我把 if 不在数组中,我将所有四个元素都放在新数组中。

我希望我已经很好地解释了我。

感谢您的帮助

干杯

【问题讨论】:

  • 在while循环中我放了array_push($per, $percorsi[$i]);但在我犯了一个错误。在代码中是这样的:array_push($per, $contents[$i]);
  • 为什么不 - if(!in_array($path, $stack))?
  • 它给了我所有四个元素,而没有跳过具有 $path 值的元素

标签: php arrays array-push


【解决方案1】:

好的,我发现解决方案改变了一些工作流程,如下所示:

$per = array();
    $path = $this->uri->segment(1);

    foreach($contents as $key => $value) {
        $stack[$key] = $value['slug'];
    }

    $i=0;
    while($i <= 3) {
        if($path !== $stack[$i]) {
            array_push($per, $contents[$i]);
        }
        $i++;
    }

谢谢。

【讨论】:

    【解决方案2】:

    这是一个简单的解决方案:

       $contents = array ( 
     0 => Array
            (
                'id' => 1,
                'title' => 'Text1',
                'slug' => 'text1',
            ),
     1 => Array
            (
                'id' => 2,
                'title' => 'Text2',
                'slug' => 'text2'
            ),
     2 => Array
            (
                'id' => 3,
                'title' => 'Text3',
                'slug' => 'text3'
            ),
     3 => Array
            (
                'id' => 4,
                'title' => 'Text3',
                'slug' => 'text3'
            )
    
    );
    
    $path = 'text3'; //$this->uri->segment(1);
    foreach($contents as $key=>$val){
        if(in_array($path, $val)){
            unset($contents[$key]);
        }
    }
    echo "<pre>"; print_r($contents);
    

    Demo

    【讨论】:

      【解决方案3】:

      改变这个。当您定义多数组时。因此没有插入值

       $per = [];
      

      【讨论】:

      • 是的。但它再次返回所有四个元素......就像没有做出 if 语句
      • 做一件事删除那个错误,在其他部分推送到数组。在 if 语句中回显某些内容
      • 不起作用... if(in_array($path, $stack)) 在所有 4 种情况下,循环中的始终为真或假。但是有一个 in_array() 与 $path = text1 和 $stack = array('text1', 'text2', 'text3', 'text4);好难啊
      • 你能打印路径和堆栈并显示内容吗?
      猜你喜欢
      • 2013-03-16
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多