向数组中添加值

3

我从mysql获取数据:

$starcik_o = mysql_query("select id, mapa, miasto, nazwa_obiektu from oferty where id = 28");
        while($data = mysql_fetch_array($starcik_o, MYSQL_ASSOC)) $punkty[] = $data;

我想在这个数组中添加另一个表格,我尝试像这样做:

foreach ($punkty as $item)
        {
        $deserialized = unserialize($item['mapa']);
        $punkty['long'] = $deserialized['lng'];
        $punkty['lat'] = $deserialized['lat'];
        }

但它并不像我想要的那样运行,因为var_dump($punkty);显示给我:
array(3) 
{ 
    [0]=> array(4) 
    { 
    ["id"]=> string(2) "28" 
    ["mapa"]=> string(97) "a:3:{s:3:"lat";s:17:"49.21103723075132";s:3:"lng";s:18:"22.330280542373657";s:4:"zoom";s:2:"17";}" 
    ["miasto"]=> string(5) "Cisna" 
    ["nazwa_obiektu"]=> string(44) "Cisna - noclegi u Mirosławy w Bieszczadach" 
    } 
    ["long"]=> string(18) "22.330280542373657" 
    ["lat"]=> string(17) "49.21103723075132" 
}

1
你为什么在foreach循环中引用$punkty?我以前从未见过这种约定。 - Matt
@Matt 给他的猫起了名字! - Dr. Dan
@ariel 这里需要注意:mysql_* 函数已经被弃用,请使用 PDO(http://php.net/manual/zh/book.pdo.php)或者 Mysqli(http://php.net/manual/zh/book.mysqli.php)进行开发。 - Matt
4个回答

3
    foreach ($punkty as &$item)
    {
        $deserialized = unserialize($item['mapa']);
        $item['long'] = $deserialized['lng'];
        $item['lat'] = $deserialized['lat'];
    }

1
不要忘记在foreach()循环结束后取消设置($item)。 - Mark Baker

1

使用

foreach ($punkty as $key => $item)
        {
        $deserialized = unserialize($item['mapa']);
        $punkty[$key]['long'] = $deserialized['lng'];
        $punkty[$key]['lat'] = $deserialized['lat'];
        }

1
foreach($punkty as &$item)简写为 - Ozerich
我同意,这也是我会做的方式。但我喜欢提出那些发布者更可能看到或理解的解决方案。当你刚开始学习编程时,理解引用及何时使用它们可能很困难,所以他更有可能复制黏贴您的解决方案,而不是真正理解发生了什么。然而,在大多数情况下,我并不反对这种更好的方法。 - Lee

1
$starcik_o = mysql_query("select id, mapa, miasto, nazwa_obiektu from oferty where id = 28");
            while($data = mysql_fetch_array($starcik_o, MYSQL_ASSOC))
{
$punkty1[] = $data[' id'];
$punkty2[] = $data['mapa'];
$punkty3[] = $data['miasto'];
$punkty4[] = $data['nazwa_obiektu'];
.....
}
try this code

0

你的循环正在执行它被告知要做的事情:它正在从每个项目中获取latlng字段,并将其写入$punkty数组。

我认为你想让latlng字段在每个单独的项目中,而不是在数组的顶层。在这种情况下,将循环更改为:

foreach ($punkty as &$item) {   // added the '&' to reference the item
    $deserialized = unserialize($item['mapa']);
    $item['long'] = $deserialized['lng'];   // saving "long" to item
    $item['lat'] = $deserialized['lat'];    // saving "lat" to item
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接