Проблем с масив..

kulov

Registered
Здравейте, имам следният проблем с един масив, тоест ето каква грешка вади..

Warning: Illegal offset type in E:\xampp\htdocs\schoolcms\admin\pages\news_add.php on line 169

Warning: Illegal offset type in E:\xampp\htdocs\schoolcms\admin\pages\news_add.php on line 169

Warning: Illegal offset type in E:\xampp\htdocs\schoolcms\admin\pages\news_add.php on line 169

Warning: Illegal offset type in E:\xampp\htdocs\schoolcms\admin\pages\news_add.php on line 169

Нямам да се впускам в обяснения по кода, ако има въпроси питайте..
Код:
$lang=mysql_query("SELECT `short` FROM `languages` ORDER BY `id` ASC") or die(mysql_error());
while($lang_row=mysql_fetch_assoc($lang))
{
	$short=$lang_row['short'];
	$text_value=$_SESSION[$short];
	$title_value=$_SESSION["title_$short"];

	$arraya=array("text_$short", "title_$short");
	$posta=array($text_value, $title_value);
				
	$masiv=array($arraya => $posta);
				
	foreach ($masiv as $insert)
        {
		$get=mysql_query("SELECT `id` FROM `news_panel` ORDER BY `id` DESC LIMIT 1") or die(mysql_error());
		$get_row=mysql_fetch_assoc($get);
		$up2=mysql_query("UPDATE `news_panel` SET `$insert[1][0]` = '$insert[0][0]', `$insert[1][1]` = '$insert[0][1]' WHERE `id` = '$get_row[id]'") or die(mysql_error());
	}
}
 
Може ли пример, как точно да го ползвам в моя случай, тей като на мен ми трябва в случая да връща Таблица -> Стойност, както то прави, но то ги връща заедно, и немога да ги отделя, най-малкото, че в случая са доста таблици и доста различни стойности ?
 
Не разбирам какво искаш:

В примера, който си дал:

$masiv=array($arraya => $posta);
до колкото разбирам искаш всички стойности от масива $arraya => да станат ключове на масива $masiv. А всички стойности от $posta да станат стойности на $masiv.

Точно това прави и array_combine
Стойностите на първия аргумент на функцията са ти ключовете в новия масив, а стойностите на втория масив са стойностите на новия $masiv

$masiv = array_combine($arraya, $posta);

Опитай се да ми обясниш какво точно искаш, но ако може с пример, че така най-добре схващам :)
 
Това ми е ясно, добре

$arraya=array("text_$short", "title_$short");

Това е масива, който садържа полетата в които трябва да се вкара информацията, сайта е многоезичен и това $short накрая държи всички възможни езици.. Както в моя случай, имам една таблица

news_panel и в нея имам полета

text_bg
text_en
text_fr
text_de

същото е и с title, та това държи масива $arraya, другият масив

$posta=array($text_value, $title_value);

държи стойностите, които трябва да станат стойности на тези полета, пъровото $text_value са стойностите на text_bg, text_en.... и тем подобни, и съответно същото е и при $title_value, до тук добре, с array_combine всичко е както трябва, тоест

text_bg => "bulgarian", както трябва, title_bg => "bulgarian" всичко ок, но как да вкарам тази информация в базата данни по този начин.. цикала се върти и изброява всичко възможни полета със всички възможни стойности..

array_combine не връща стойности от сорта на

[0] => "bulgarian",
[1] => "english", ....

то връща

[title_bg] => "bulgarian" ... та просто не мога да разбера по този начин как да вкарам тази информация.. не се получава да искарам стойностите с цикъл или нещо от сорта... ?
 
Честно казано и преди съм се опитвал да ти разбера идеята с тая многоезичност и все не я хващам.

Може ли едно echo "<pre>"; print_r($masiv); echo "</pre>";
и да ми дадеш резултата.
Също ако искаш да ти ги изкарва във вида:

0 => "bulgarian", тогава $arraya просто го направи да е равен на array(0, 1, ....)

Нистина няколко пъти чета поста ти, но не мога да дефинирам точно проблема:)
 
Код:
Array
(
    [text_bg] => Bulgarian text
    [title_bg] => Bulgarian
)

Array
(
    [text_en] => English text
    [title_en] => English
)

Array
(
    [text_fr] => French text
    [title_fr] => French
)

Array
(
    [text_de] => German text
    [title_de] => German
)
 
след

$masiv = array_combine($arraya, $posta);

добавяш:

$i = 0;
foreach($masiv as $insert) {
$masiv[$i] = $insert;
$i++;
}

и така ще ти ги върне във вида:

Array
(
[0] => Bulgarian text
[1] => Bulgarian
)

Array
(
[0] => English text
[1] => English
)

Array
(
[0] => French text
[1] => French
)

Array
(
[0] => German text
[1] => German
)

малко каруцарски метод, но той ми хрумна като начало :)

Или както казах в горния пост, $arraya го промени.
Ако изобщо това искаш :)
 
Мерси стана, ако те интересува, ето крайният варянт на кода..

Код:
$lang=mysql_query("SELECT `short` FROM `languages` ORDER BY `id` ASC") or die(mysql_error());
while($lang_row=mysql_fetch_assoc($lang))
{
	$short=$lang_row['short'];
	$text_value=$_SESSION[$short];
	$title_value=$_SESSION["title_$short"];

	$arraya=array("text_$short", "title_$short");
	$posta=array($text_value, $title_value);
				
	$masiv=array_combine($arraya, $posta);
				
	$i = 0;
	foreach($masiv as $insert) {
		$masiv[$i] = $insert;
		$i++;
	}
				
	$get=mysql_query("SELECT `id` FROM `news_panel` ORDER BY `id` DESC LIMIT 1") or die(mysql_error());
	$get_row=mysql_fetch_assoc($get);
	$up2=mysql_query("UPDATE `news_panel` SET `$arraya[0]` = '$masiv[0]', $arraya[1] = '$masiv[1]' WHERE `id` = '$get_row[id]'") or die(mysql_error());
				
				
}
 

Back
Горе