【问题标题】:converting object to array then adding element to end of array then shuffle将对象转换为数组,然后将元素添加到数组末尾,然后随机播放
【发布时间】:2016-05-29 03:42:06
【问题描述】:

我想是时候问了,因为我已经为此工作了一个多小时。

我需要获取一个对象并将其转换为数组 - 完成 我需要在数组末尾添加一个新元素,如 [9] => value - ISSUE :( 我需要洗牌 - 完成

我尝试过的每样东西都会像这样出来

这里是 $wlist 作为原始类对象

 CAPTCHA_CLASS_Wordlist Object
 (
[jsObjectList] => Array
    (
        [0] => providers
        [1] => chemical
        [2] => family
        [3] => supported
        [4] => urban
        [5] => produced
        [6] => continued
        [7] => stream
        [8] => administrative
    )

 )

转换后是这个

Array
(
[0] => Array
    (
        [0] => claim
        [1] => continued
        [2] => limit
        [3] => platform
        [4] => websites
        [5] => efforts
        [6] => dollars
        [7] => saint
        [8] => family
    )

[1] => water
)

它必须是 [9] => 值

我什至尝试过 $arrayname[9] = $value 和 $arrayname[0][9] 都没有成功。即使我在 foreach 中重新创建数组,我仍然遇到同样的问题,无法添加额外的末尾的元素作为键 [9]

这是我的代码

      //convert object to array
     $convert = (array)$wlist;

     //now add the answer to it
     array_push($convert, $questanswer);

     //now shuffle

     $final = shuffle($convert);

$questanswer 只是一个文本词,例如 - house

谢谢:)

更新:这是 stdClass 之后的样子

         //convert object to array
     $convert = (array)$wlist;

     //new stdClass and load it
     $nc = new stdClass;
     $nc->questanswer = $questanswer;

     //now add the answer to it
     array_push($convert[0], $nc);

     $finaloptions = shuffle($convert);


  Array
 (
  [0] => stdClass Object
    (
        [questanswer] => hexagon
    )

[1] => Array
    (
        [0] => labor
        [1] => designated
        [2] => shops
        [3] => load
        [4] => fresh
        [5] => mass
        [6] => patch
        [7] => foot
        [8] => congress
    )

)

【问题讨论】:

  • 使用get_object_vars
  • 我想我也试过了,但让我再做一次,这是漫长的一天:)
  • 是的,我仍然有同样的问题,只是转换它,我在转换后添加了额外的元素,所以同样的问题
  • 我想我可以将文本值转换为数组然后合并,但我认为这将是相同的
  • 好的,所以你的意思是在我将元素转换为数组之前添加元素,对吧?所以在它仍然是一个对象的时候添加新值吧?

标签: php arrays apache element


【解决方案1】:

$convert 是一个嵌套数组。在它的第一个元素上使用array_push

  //convert object to array
 $convert = (array)$wlist;

 //now add the answer to it
 array_push($convert[0], $questanswer);

 //now shuffle
 $final = shuffle($convert);

编辑

如果您想继续走这条路,答案是返回到您的原始代码(例如,删除$nc = new StdClass... 的东西),除了您使用array_push($convert, $questanswer); 而不是array_push($conver[0], $questanswer);

但是,您可能首先要考虑一下为什么要这样做。如果这个CAPTCHA_CLASS_Wordlist 是您创建的类,您应该考虑添加一个函数,您只需将$questanswer 传递给它并返回所需的数组。

如果这是你的类定义文件...

CAPTCHA_CLASS_Wordlist.php

<?php
class CAPTCHA_CLASS_Wordlist
{
    JsObjectList = [...];

    ... your other code ...

    public function getShuffledObjectListWithAnswer($questionAnswer)
    {
        $tempCopy = $this->JsObjectList;

         //now add the answer to it
         array_push($tempCopy, $questionAnswer);

         //now shuffle
         return shuffle($tempCopy);
    }
}

现在,您可以像这样使用$wlist

$final = $wlist->getShuffledObjectListWithAnswer($questanswer);

完成。

附:当然,您不必调用函数getShuffledObjectListWithAnswer。这似乎是描述性的。更清楚它实际上应该做什么的人可能会想出更好的东西。

【讨论】:

  • 不能做那个终点,因为它在使用 [0] array_push() 期望参数 1 是数组时返回这个,给定 null
  • 看起来您编辑了代码(但没有更新问题中的代码。请这样做)。你现在必须做array_push($convert[1], $questanswer);。或还原您的代码
【解决方案2】:

我只是这样做了。 似乎工作?

$wlist = new stdClass();
$wlist->property = 'Here we go';
$wlist->property1 = 'Here we go1';
$wlist->property11 = 'Here we go2';
var_dump($wlist);
$questanswer = 'bla';

//convert object to array
$convert = (array)$wlist;
var_dump($convert);
//now add the answer to it
array_push($convert, $questanswer);
var_dump($convert);
//now shuffle

$final = shuffle($convert);

var_dump($convert);
exit;

【讨论】:

  • 我认为这不起作用的原因是因为我从什么开始,我很抱歉我也应该发布这个。我稍后会更新帖子,以便您查看
  • 我看到了你更新的帖子。多余的“水”从何而来? :) 只需获取您要处理的数组,将其放入变量中,然后对其执行所有其他讨厌的事情。
  • 谢谢大家的帮助,非常感谢,现在我可以去吃冰淇淋了,哈哈 :)
【解决方案3】:

搜索要添加$questanswer 的索引。设索引为$search_index

Check Online

$search_index = 0;
$convert = (array) $wlist;

//now add the answer to it
array_push($convert[$search_index], $questanswer);

$convert[$search_index]是数组,也可以通过简单的语句来实现。

$convert[$search_index][] = $questanswer;

【讨论】:

  • 从未考虑过使用stdClass,但我没有阅读文档,所以我记得下次我需要它时......谢谢:) 我试试吧
  • @dave,如果您希望输出,那么我们可以更好地了解您的实际需求,删除您更新的问题,我认为这与您的需求无关。
  • 数组 0 0 和数组 1 0-8 都没有工作
  • 数组 ( [0] => 数组 ( [0] => 4 ) [1] => 数组 ( [0] => 我自己 [1] => 劳动力 [2] => 新鲜 [ 3] => 美元 [4] => 玫瑰 [5] => 数量 [6] => 大众 [7] => 实践 [8] => 治疗 ) )
  • $searchindex = 0; //将对象转换为数组 $convert = (array)$wlist; //现在添加答案 $convert[$searchindex][] = $questanswer;
猜你喜欢
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
  • 2019-10-21
  • 2011-06-16
  • 1970-01-01
  • 2013-07-15
相关资源
最近更新 更多