PHP将多个对象转换为一个数组

时间:2017-11-05 10:34:32

标签: php arrays object

在尝试转换多个对象并将它们放入一个数组时,我很遗憾地得到了一个数组中的数组结果。

我想要转换的对象:

def __init__(self, startUrls, *args, **kwargs):

    self.keywords = ['sales','advertise','contact','about','policy','terms','feedback','support','faq']

    self.startUrls = startUrls

    self.startUrls = json.loads(self.startUrls)

    super(MySpider, self).__init__(*args, **kwargs)

def start_requests(self):

    for url in self.startUrls:

        yield Request(url=url)

我的PHP:

array(2) {
  [0]=>
  object(stdClass)#104 (1) {
    ["name"]=>
    string(4) "Paul"
  }
  [1]=>
  object(stdClass)#105 (1) {
    ["name"]=>
    string(5) "Jenna"
  }
}

输出:

for ($i=0; $i < count($readers) ; $i++) {
    $json = json_encode($readers[$i]);    // 1          

    $data = json_decode($json, TRUE);     // 2    

    $arr = array();
    array_push($arr, $data);              // 3
}

-

// 1
{"name":"Paul"}{"name":"Jenna"}

-

// 2
Array
(
    [name] => Paul
)
Array
(
    [name] => Jenna
)

期望的结果

我想将所有内容合并到一个数组中。关键是索引,值是名称。

// 3
Array
(
    [0] => Array
        (
            [name] => Paul
        )

)
Array
(
    [0] => Array
        (
            [name] => Jenna
        )

)  

3 个答案:

答案 0 :(得分:1)

循环遍历对象数组($arr)并使用$finArr值编译最终数组($val->string)。试试这个:

$finArr = array();
foreach ($arr as $key => $val) {
  $finArr[] = $val->string;
}

答案 1 :(得分:1)

您还必须从数组中提取键。并在foreach之外声明$arr = array()

$arr = array();
for ($i=0; $i < count($readers) ; $i++) {
    $data = $readers[$i]->name;          //change this line 
    array_push($arr, $data);              // 3
}

print_r($arr);

另一种方法是你可以简单地使用array_column()

$arr = array_column($readers,"name");
print_r($arr);

答案 2 :(得分:1)

您可以简单地遍历读者数组,提取每个读者的名称,并根据需要将每个名称添加到数字索引数组中。

$names = array(); // Initialize.

foreach($readers as $reader) {
    if (!empty($reader->name)) {
        $names[] = $reader->name;
    }
}
print_r($names); // To see what you've got.
Array
(
    [0] => Paul
    [1] => Jenna
)